diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index 1b77743..c87536e 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -29,7 +29,7 @@ export class UserController { @OpenAPI({ description: 'Lists all users.
This includes their groups and permissions directly granted to them (if existing/associated).' }) async getAll() { let responseUsers: ResponseUser[] = new Array(); - const users = await this.userRepository.find({ relations: ['permissions', 'groups'] }); + const users = await this.userRepository.find({ relations: ['permissions', 'groups', 'groups.permissions'] }); users.forEach(user => { responseUsers.push(new ResponseUser(user)); }); @@ -43,7 +43,7 @@ export class UserController { @OnUndefined(UserNotFoundError) @OpenAPI({ description: 'Lists all information about the user whose id got provided.
Please remember that only permissions granted directly to the user will show up here, not permissions inherited from groups.' }) async getOne(@Param('id') id: number) { - let user = await this.userRepository.findOne({ id: id }, { relations: ['permissions', 'groups'] }) + let user = await this.userRepository.findOne({ id: id }, { relations: ['permissions', 'groups', 'groups.permissions'] }) if (!user) { throw new UserNotFoundError(); } return new ResponseUser(user); } diff --git a/src/models/entities/User.ts b/src/models/entities/User.ts index 00c18e4..94e091c 100644 --- a/src/models/entities/User.ts +++ b/src/models/entities/User.ts @@ -132,18 +132,20 @@ export class User extends Principal { * Resolves all permissions granted to this user through groups or directly to the string enum format. */ public get allPermissions(): string[] { - let allPermissions = new Array(); - for (let permission in this.permissions) { - allPermissions.push(permission.toString()); + let returnPermissions: string[] = new Array(); + + if (!this.permissions) { return returnPermissions; } + for (let permission of this.permissions) { + returnPermissions.push(permission.toString()); } + if (!this.groups) { return returnPermissions; } for (let group of this.groups) { - for (let permission in group.permissions) { - allPermissions.push(permission.toString()); + for (let permission of group.permissions) { + returnPermissions.push(permission.toString()); } } - console.log(allPermissions) - return Array.from(new Set(allPermissions)); + return Array.from(new Set(returnPermissions)); } /** diff --git a/src/models/responses/ResponseUser.ts b/src/models/responses/ResponseUser.ts index ff25c6a..3da5434 100644 --- a/src/models/responses/ResponseUser.ts +++ b/src/models/responses/ResponseUser.ts @@ -91,5 +91,6 @@ export class ResponseUser extends ResponsePrincipal { this.profilePic = user.profilePic; this.groups = user.groups; this.permissions = user.allPermissions; + this.groups.forEach(function (g) { delete g.permissions }); } }