diff --git a/src/controllers/UserGroupController.ts b/src/controllers/UserGroupController.ts
index 18a901d..c68baff 100644
--- a/src/controllers/UserGroupController.ts
+++ b/src/controllers/UserGroupController.ts
@@ -8,6 +8,7 @@ import { UpdateUserGroup } from '../models/actions/update/UpdateUserGroup';
import { UserGroup } from '../models/entities/UserGroup';
import { ResponseEmpty } from '../models/responses/ResponseEmpty';
import { ResponseUserGroup } from '../models/responses/ResponseUserGroup';
+import { ResponseUserGroupPermissions } from '../models/responses/ResponseUserGroupPermissions';
import { PermissionController } from './PermissionController';
@@ -25,20 +26,37 @@ export class UserGroupController {
@Get()
@Authorized("USERGROUP:GET")
- @ResponseSchema(UserGroup, { isArray: true })
+ @ResponseSchema(ResponseUserGroup, { isArray: true })
@OpenAPI({ description: 'Lists all groups.
The information provided might change while the project continues to evolve.' })
- getAll() {
- return this.userGroupsRepository.find({ relations: ["permissions"] });
+ async getAll() {
+ let responseGroups: ResponseUserGroup[] = new Array();
+ const groups = await this.userGroupsRepository.find({ relations: ['permissions'] });
+ groups.forEach(group => {
+ responseGroups.push(group.toResponse());
+ });
+ return responseGroups;
}
@Get('/:id')
@Authorized("USERGROUP:GET")
- @ResponseSchema(UserGroup)
+ @ResponseSchema(ResponseUserGroup)
@ResponseSchema(UserGroupNotFoundError, { statusCode: 404 })
@OnUndefined(UserGroupNotFoundError)
@OpenAPI({ description: 'Lists all information about the group whose id got provided.
The information provided might change while the project continues to evolve.' })
- getOne(@Param('id') id: number) {
- return this.userGroupsRepository.findOne({ id: id }, { relations: ["permissions"] });
+ async getOne(@Param('id') id: number) {
+ return await (await (this.userGroupsRepository.findOne({ id: id }, { relations: ["permissions"] }))).toResponse();
+ }
+
+ @Get('/:id/permissions')
+ @Authorized("USERGROUP:GET")
+ @ResponseSchema(ResponseUserGroupPermissions)
+ @ResponseSchema(UserGroupNotFoundError, { statusCode: 404 })
+ @OnUndefined(UserGroupNotFoundError)
+ @OpenAPI({ description: 'Lists all permissions granted to the group as permission response objects.' })
+ async getPermissions(@Param('id') id: number) {
+ let group = await this.userGroupsRepository.findOne({ id: id }, { relations: ['permissions', 'permissions.principal'] })
+ if (!group) { throw new UserGroupNotFoundError(); }
+ return new ResponseUserGroupPermissions(group);
}
@Post()
@@ -54,7 +72,8 @@ export class UserGroupController {
throw error;
}
- return this.userGroupsRepository.save(userGroup);
+ userGroup = await this.userGroupsRepository.save(userGroup);
+ return (await (this.userGroupsRepository.findOne({ id: userGroup.id }, { relations: ["permissions"] }))).toResponse();
}
@Put('/:id')
diff --git a/src/models/responses/ResponseUserGroup.ts b/src/models/responses/ResponseUserGroup.ts
index e6f00bb..a0a8350 100644
--- a/src/models/responses/ResponseUserGroup.ts
+++ b/src/models/responses/ResponseUserGroup.ts
@@ -2,7 +2,6 @@ import { IsArray, IsNotEmpty, IsOptional, IsString } from "class-validator";
import { UserGroup } from '../entities/UserGroup';
import { ResponseObjectType } from '../enums/ResponseObjectType';
import { IResponse } from './IResponse';
-import { ResponsePermission } from './ResponsePermission';
import { ResponsePrincipal } from './ResponsePrincipal';
/**
@@ -34,7 +33,7 @@ export class ResponseUserGroup extends ResponsePrincipal implements IResponse {
*/
@IsArray()
@IsOptional()
- permissions: ResponsePermission[];
+ permissions: string[] = new Array();
/**
* Creates a ResponseUserGroup object from a userGroup.
@@ -46,7 +45,7 @@ export class ResponseUserGroup extends ResponsePrincipal implements IResponse {
this.description = group.description;
if (group.permissions) {
for (let permission of group.permissions) {
- this.permissions.push(permission.toResponse());
+ this.permissions.push(permission.toString());
}
}
}
diff --git a/src/models/responses/ResponseUserGroupPermissions.ts b/src/models/responses/ResponseUserGroupPermissions.ts
new file mode 100644
index 0000000..16726de
--- /dev/null
+++ b/src/models/responses/ResponseUserGroupPermissions.ts
@@ -0,0 +1,43 @@
+import {
+ IsArray,
+ IsOptional
+} from "class-validator";
+import { UserGroup } from '../entities/UserGroup';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
+import { ResponsePermission } from './ResponsePermission';
+
+/**
+ * Defines the group permission response (get /api/groups/:id/permissions).
+*/
+export class ResponseUserGroupPermissions implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.USERPERMISSIONS;
+
+ /**
+ * The permissions directly granted to the group.
+ */
+ @IsArray()
+ @IsOptional()
+ directlyGranted: ResponsePermission[] = new Array();
+
+ /**
+ * Is just here for compatability.
+ */
+ @IsArray()
+ @IsOptional()
+ inherited: ResponsePermission[] = new Array();
+
+ /**
+ * Creates a ResponseUserPermissions object from a group.
+ * @param group The group the response shall be build for.
+ */
+ public constructor(group: UserGroup) {
+ for (let permission of group.permissions) {
+ this.directlyGranted.push(permission.toResponse());
+ }
+ }
+}