@@ -66,40 +66,44 @@ export class DBHelper {
6666 return result ;
6767 }
6868 public static async DecorateWithRoles ( user : User ) : Promise < void > {
69- const roles : Role [ ] = await this . GetRoles ( user . _id , 0 ) ;
70- user . roles = [ ] ;
71- roles . forEach ( role => {
72- user . roles . push ( new Rolemember ( role . name , role . _id ) ) ;
73- } ) ;
74- // let query: any = { _type: "role" };
75- // const _roles: Role[] = await Config.db.query<Role>(query, null, Config.expected_max_roles, 0, null, "users", Crypt.rootToken());
76- // if (_roles.length === 0 && user.username !== "root") {
77- // throw new Error("System has no roles !!!!!!");
78- // }
79- // user.roles = [];
80- // _roles.forEach(role => {
81- // let isMember: number = -1;
82- // if (role.members !== undefined) { isMember = role.members.map(function (e: Rolemember): string { return e._id; }).indexOf(user._id); }
83- // const beenAdded: number = user.roles.map(function (e: Rolemember): string { return e._id; }).indexOf(user._id);
84- // if (isMember > -1 && beenAdded === -1) {
85- // user.roles.push(new Rolemember(role.name, role._id));
86- // }
87- // });
88- // let foundone: boolean = true;
89- // while (foundone) {
90- // foundone = false;
91- // user.roles.forEach(userrole => {
92- // _roles.forEach(role => {
93- // let isMember: number = -1;
94- // if (role.members !== undefined) { isMember = role.members.map(function (e: Rolemember): string { return e._id; }).indexOf(userrole._id); }
95- // const beenAdded: number = user.roles.map(function (e: Rolemember): string { return e._id; }).indexOf(role._id);
96- // if (isMember > -1 && beenAdded === -1) {
97- // user.roles.push(new Rolemember(role.name, role._id));
98- // foundone = true;
99- // }
100- // });
101- // });
102- // }
69+ if ( ! Config . decorate_roles_fetching_all_roles ) {
70+ const roles : Role [ ] = await this . GetRoles ( user . _id , 0 ) ;
71+ user . roles = [ ] ;
72+ roles . forEach ( role => {
73+ user . roles . push ( new Rolemember ( role . name , role . _id ) ) ;
74+ } ) ;
75+ } else {
76+ let query : any = { _type : "role" } ;
77+ const _roles : Role [ ] = await Config . db . query < Role > ( query , null , Config . expected_max_roles , 0 , null , "users" , Crypt . rootToken ( ) ) ;
78+ if ( _roles . length === 0 && user . username !== "root" ) {
79+ throw new Error ( "System has no roles !!!!!!" ) ;
80+ }
81+ user . roles = [ ] ;
82+ _roles . forEach ( role => {
83+ let isMember : number = - 1 ;
84+ if ( role . members !== undefined ) { isMember = role . members . map ( function ( e : Rolemember ) : string { return e . _id ; } ) . indexOf ( user . _id ) ; }
85+ const beenAdded : number = user . roles . map ( function ( e : Rolemember ) : string { return e . _id ; } ) . indexOf ( user . _id ) ;
86+ if ( isMember > - 1 && beenAdded === - 1 ) {
87+ user . roles . push ( new Rolemember ( role . name , role . _id ) ) ;
88+ }
89+ } ) ;
90+ let foundone : boolean = true ;
91+ while ( foundone ) {
92+ foundone = false ;
93+ user . roles . forEach ( userrole => {
94+ _roles . forEach ( role => {
95+ let isMember : number = - 1 ;
96+ if ( role . members !== undefined ) { isMember = role . members . map ( function ( e : Rolemember ) : string { return e . _id ; } ) . indexOf ( userrole . _id ) ; }
97+ const beenAdded : number = user . roles . map ( function ( e : Rolemember ) : string { return e . _id ; } ) . indexOf ( role . _id ) ;
98+ if ( isMember > - 1 && beenAdded === - 1 ) {
99+ user . roles . push ( new Rolemember ( role . name , role . _id ) ) ;
100+ foundone = true ;
101+ }
102+ } ) ;
103+ } ) ;
104+ }
105+ }
106+
103107 }
104108 public static async FindRoleByName ( name : string ) : Promise < Role > {
105109 const items : Role [ ] = await Config . db . query < Role > ( { name : name } , null , 1 , 0 , null , "users" , Crypt . rootToken ( ) ) ;
0 commit comments