1
-
2
-
3
1
import _ from 'lodash' ;
2
+ import Joi from 'joi' ;
3
+ import validate from 'express-validation' ;
4
4
import { middleware as tcMiddleware } from 'tc-core-library-js' ;
5
5
import util from '../../util' ;
6
- import { USER_ROLE , PROJECT_MEMBER_ROLE , MANAGER_ROLES , INVITE_STATUS } from '../../constants' ;
6
+ import { INVITE_STATUS , MANAGER_ROLES , PROJECT_MEMBER_ROLE , USER_ROLE } from '../../constants' ;
7
7
import models from '../../models' ;
8
8
9
9
/**
@@ -13,14 +13,40 @@ import models from '../../models';
13
13
*/
14
14
const permissions = tcMiddleware . permissions ;
15
15
16
+ const createProjectMemberValidations = {
17
+ body : {
18
+ param : Joi . object ( )
19
+ . keys ( {
20
+ role : Joi . any ( )
21
+ . valid ( PROJECT_MEMBER_ROLE . MANAGER , PROJECT_MEMBER_ROLE . ACCOUNT_MANAGER , PROJECT_MEMBER_ROLE . COPILOT ) ,
22
+ } ) ,
23
+ } ,
24
+ } ;
25
+
16
26
module . exports = [
17
27
// handles request validations
28
+ validate ( createProjectMemberValidations ) ,
18
29
permissions ( 'project.addMember' ) ,
19
30
( req , res , next ) => {
20
31
let targetRole ;
21
- if ( util . hasRoles ( req , [ USER_ROLE . MANAGER ] ) ) {
32
+ if ( _ . get ( req , 'body.param.role' ) ) {
33
+ targetRole = _ . get ( req , 'body.param.role' ) ;
34
+
35
+ if ( [ PROJECT_MEMBER_ROLE . MANAGER , PROJECT_MEMBER_ROLE . ACCOUNT_MANAGER ] . includes ( targetRole ) &&
36
+ ! util . hasRoles ( req , [ USER_ROLE . MANAGER ] ) ) {
37
+ const err = new Error ( `Only manager is able to join as ${ targetRole } ` ) ;
38
+ err . status = 401 ;
39
+ return next ( err ) ;
40
+ }
41
+
42
+ if ( targetRole === PROJECT_MEMBER_ROLE . COPILOT && ! util . hasRoles ( req , [ USER_ROLE . COPILOT ] ) ) {
43
+ const err = new Error ( `Only copilot is able to join as ${ targetRole } ` ) ;
44
+ err . status = 401 ;
45
+ return next ( err ) ;
46
+ }
47
+ } else if ( util . hasRoles ( req , [ USER_ROLE . MANAGER , USER_ROLE . CONNECT_ADMIN ] ) ) {
22
48
targetRole = PROJECT_MEMBER_ROLE . MANAGER ;
23
- } else if ( util . hasRoles ( req , [ USER_ROLE . COPILOT ] ) ) {
49
+ } else if ( util . hasRoles ( req , [ USER_ROLE . COPILOT , USER_ROLE . CONNECT_ADMIN ] ) ) {
24
50
targetRole = PROJECT_MEMBER_ROLE . COPILOT ;
25
51
} else {
26
52
const err = new Error ( 'Only copilot or manager is able to call this endpoint' ) ;
@@ -60,13 +86,17 @@ module.exports = [
60
86
. then ( ( _invite ) => {
61
87
invite = _invite ;
62
88
if ( ! invite ) {
63
- return res . status ( 201 ) . json ( util . wrapResponse ( req . id , newMember , 1 , 201 ) ) ;
89
+ return res . status ( 201 )
90
+ . json ( util . wrapResponse ( req . id , newMember , 1 , 201 ) ) ;
64
91
}
65
92
return invite . update ( {
66
93
status : INVITE_STATUS . ACCEPTED ,
67
- } ) . then ( ( ) => res . status ( 201 ) . json ( util . wrapResponse ( req . id , newMember , 1 , 201 ) ) ) ;
94
+ } )
95
+ . then ( ( ) => res . status ( 201 )
96
+ . json ( util . wrapResponse ( req . id , newMember , 1 , 201 ) ) ) ;
68
97
} ) ;
69
98
} ) ;
70
- } ) . catch ( err => next ( err ) ) ;
99
+ } )
100
+ . catch ( err => next ( err ) ) ;
71
101
} ,
72
102
] ;
0 commit comments