Merge pull request 'usergroups/permissions endpoint feature/143-usergroup_permissions_endpoint' (#144) from feature/143-usergroup_permissions_endpoint into dev
Reviewed-on: #144
This commit is contained in:
commit
a30a342e00
|
@ -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. <br> 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<ResponseUserGroup>();
|
||||
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. <br> 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')
|
||||
|
|
|
@ -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<string>();
|
||||
|
||||
/**
|
||||
* 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<ResponsePermission>();
|
||||
|
||||
/**
|
||||
* Is just here for compatability.
|
||||
*/
|
||||
@IsArray()
|
||||
@IsOptional()
|
||||
inherited: ResponsePermission[] = new Array<ResponsePermission>();
|
||||
|
||||
/**
|
||||
* 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());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue