11const Boom = require ( 'boom' ) ;
2+ const { hasRoleInList, isConnectedUser, rightsError } = require ( '../middlewares' ) ;
23const { payload, params } = require ( './user-validation' ) ;
34
45module . exports = {
56 method : 'PUT' ,
67 path : '/users/{user}' ,
78 config : {
9+ pre : [ isConnectedUser , hasRoleInList ( 'rh' , 'staff' ) ] ,
810 validate : {
911 payload : payload . put ,
1012 params,
@@ -13,23 +15,29 @@ module.exports = {
1315 handler ( req , res ) {
1416 const { User } = req . server . plugins . users . models ;
1517
18+ // User can't edit his roles if doesn't have rights.
19+ if ( req . pre . isOwner && ! req . pre . hasRights && req . payload . roles ) {
20+ return res ( rightsError ) ;
21+ }
22+
1623 const userPromise = User
1724 . findOne ( { _id : req . params . user } )
1825 . exec ( )
1926 . then ( ( user ) => {
2027 if ( ! user ) {
21- return Boom . notFound ( 'User Not Found' ) ;
28+ return Promise . reject ( Boom . notFound ( 'User Not Found' ) ) ;
2229 }
2330
2431 return Object
2532 . assign ( user , {
26- firstName : req . payload . firstName ,
27- lastName : req . payload . lastName ,
28- fallbackEmail : req . payload . fallbackEmail ,
33+ firstName : req . payload . firstName || user . firstName ,
34+ lastName : req . payload . lastName || user . lastName ,
35+ fallbackEmail : req . payload . fallbackEmail || user . fallbackEmail ,
36+ roles : req . payload . roles || user . roles ,
2937 } )
3038 . save ( ) ;
3139 } ) ;
3240
33- res . mongodb ( userPromise , [ 'password' ] ) ;
41+ return res . mongodb ( userPromise , [ 'password' ] ) ;
3442 } ,
3543} ;
0 commit comments