parent
ff3a5b4545
commit
882065470a
@ -1,12 +1,14 @@
|
|||||||
import { Body, Delete, Get, JsonController, OnUndefined, Param, Post, QueryParam } from 'routing-controllers';
|
import { Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam } from 'routing-controllers';
|
||||||
import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
|
import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
|
||||||
import { getConnectionManager, Repository } from 'typeorm';
|
import { getConnectionManager, Repository } from 'typeorm';
|
||||||
import { PermissionNotFoundError } from '../errors/PermissionErrors';
|
import { PermissionIdsNotMatchingError, PermissionNeedsPrincipalError, PermissionNotFoundError } from '../errors/PermissionErrors';
|
||||||
import { PrincipalNotFoundError } from '../errors/PrincipalsErrors';
|
import { PrincipalNotFoundError } from '../errors/PrincipalErrors';
|
||||||
import { CreatePermission } from '../models/actions/CreatePermission';
|
import { CreatePermission } from '../models/actions/CreatePermission';
|
||||||
|
import { UpdatePermission } from '../models/actions/UpdatePermission';
|
||||||
import { Permission } from '../models/entities/Permission';
|
import { Permission } from '../models/entities/Permission';
|
||||||
import { ResponseEmpty } from '../models/responses/ResponseEmpty';
|
import { ResponseEmpty } from '../models/responses/ResponseEmpty';
|
||||||
import { ResponsePermission } from '../models/responses/ResponsePermission';
|
import { ResponsePermission } from '../models/responses/ResponsePermission';
|
||||||
|
import { ResponsePrincipal } from '../models/responses/ResponsePrincipal';
|
||||||
|
|
||||||
|
|
||||||
@JsonController('/permissions')
|
@JsonController('/permissions')
|
||||||
@ -64,13 +66,15 @@ export class PermissionController {
|
|||||||
return new ResponsePermission(permission);
|
return new ResponsePermission(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@Put('/:id')
|
@Put('/:id')
|
||||||
@ResponseSchema(ResponsePrincipal)
|
@ResponseSchema(ResponsePrincipal)
|
||||||
@ResponseSchema(PermissionNotFoundError, { statusCode: 404 })
|
@ResponseSchema(PermissionNotFoundError, { statusCode: 404 })
|
||||||
|
@ResponseSchema(PrincipalNotFoundError, { statusCode: 404 })
|
||||||
@ResponseSchema(PermissionIdsNotMatchingError, { statusCode: 406 })
|
@ResponseSchema(PermissionIdsNotMatchingError, { statusCode: 406 })
|
||||||
@OpenAPI({ description: "Update a runnerTeam object (id can't be changed)." })
|
@ResponseSchema(PermissionNeedsPrincipalError, { statusCode: 406 })
|
||||||
async put(@Param('id') id: number, @EntityFromBody() permission: Permission) {
|
@OpenAPI({ description: "Update a permission object (id can't be changed)." })
|
||||||
|
async put(@Param('id') id: number, @Body({ validate: true }) permission: UpdatePermission) {
|
||||||
let oldPermission = await this.permissionRepository.findOne({ id: id }, { relations: ['principal'] });
|
let oldPermission = await this.permissionRepository.findOne({ id: id }, { relations: ['principal'] });
|
||||||
|
|
||||||
if (!oldPermission) {
|
if (!oldPermission) {
|
||||||
@ -81,10 +85,10 @@ export class PermissionController {
|
|||||||
throw new PermissionIdsNotMatchingError();
|
throw new PermissionIdsNotMatchingError();
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.permissionRepository.update(oldPermission, permission);
|
await this.permissionRepository.update(oldPermission, await permission.toPermission());
|
||||||
|
|
||||||
return new ResponsePermission(await this.permissionRepository.findOne({ id: permission.id }, { relations: ['principal'] }));
|
return new ResponsePermission(await this.permissionRepository.findOne({ id: permission.id }, { relations: ['principal'] }));
|
||||||
}*/
|
}
|
||||||
|
|
||||||
@Delete('/:id')
|
@Delete('/:id')
|
||||||
@ResponseSchema(ResponsePermission)
|
@ResponseSchema(ResponsePermission)
|
||||||
|
@ -22,4 +22,15 @@ export class PermissionIdsNotMatchingError extends NotAcceptableError {
|
|||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
message = "The id's don't match!! \n And if you wanted to change a permission's id: This isn't allowed"
|
message = "The id's don't match!! \n And if you wanted to change a permission's id: This isn't allowed"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error to throw when a permission get's provided without a principal.
|
||||||
|
*/
|
||||||
|
export class PermissionNeedsPrincipalError extends NotAcceptableError {
|
||||||
|
@IsString()
|
||||||
|
name = "PermissionNeedsPrincipalError"
|
||||||
|
|
||||||
|
@IsString()
|
||||||
|
message = "You provided no principal for this permission."
|
||||||
}
|
}
|
24
src/errors/PrincipalErrors.ts
Normal file
24
src/errors/PrincipalErrors.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { IsString } from 'class-validator';
|
||||||
|
import { NotAcceptableError, NotFoundError } from 'routing-controllers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error to throw when a user couldn't be found.
|
||||||
|
*/
|
||||||
|
export class PrincipalNotFoundError extends NotFoundError {
|
||||||
|
@IsString()
|
||||||
|
name = "PrincipalNotFoundError"
|
||||||
|
|
||||||
|
@IsString()
|
||||||
|
message = "Principal not found!"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error to throw, when a provided runnerOrganisation doesn't belong to the accepted types.
|
||||||
|
*/
|
||||||
|
export class PrincipalWrongTypeError extends NotAcceptableError {
|
||||||
|
@IsString()
|
||||||
|
name = "PrincipalWrongTypeError"
|
||||||
|
|
||||||
|
@IsString()
|
||||||
|
message = "The princial must have an existing principal's id. \n You provided a object of another type."
|
||||||
|
}
|
@ -1,13 +0,0 @@
|
|||||||
import { IsString } from 'class-validator';
|
|
||||||
import { NotFoundError } from 'routing-controllers';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error to throw when a user couldn't be found.
|
|
||||||
*/
|
|
||||||
export class PrincipalNotFoundError extends NotFoundError {
|
|
||||||
@IsString()
|
|
||||||
name = "PrincipalNotFoundError"
|
|
||||||
|
|
||||||
@IsString()
|
|
||||||
message = "Principal not found!"
|
|
||||||
}
|
|
@ -3,7 +3,7 @@ import {
|
|||||||
IsNotEmpty
|
IsNotEmpty
|
||||||
} from "class-validator";
|
} from "class-validator";
|
||||||
import { getConnectionManager } from 'typeorm';
|
import { getConnectionManager } from 'typeorm';
|
||||||
import { PrincipalNotFoundError } from '../../errors/PrincipalsErrors';
|
import { PrincipalNotFoundError } from '../../errors/PrincipalErrors';
|
||||||
import { Permission } from '../entities/Permission';
|
import { Permission } from '../entities/Permission';
|
||||||
import { Principal } from '../entities/Principal';
|
import { Principal } from '../entities/Principal';
|
||||||
import { PermissionAction } from '../enums/PermissionAction';
|
import { PermissionAction } from '../enums/PermissionAction';
|
||||||
|
65
src/models/actions/UpdatePermission.ts
Normal file
65
src/models/actions/UpdatePermission.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import { IsInt, IsNotEmpty, IsObject } from 'class-validator';
|
||||||
|
import { getConnectionManager } from 'typeorm';
|
||||||
|
import { PermissionNeedsPrincipalError } from '../../errors/PermissionErrors';
|
||||||
|
import { PrincipalNotFoundError, PrincipalWrongTypeError } from '../../errors/PrincipalErrors';
|
||||||
|
import { Permission } from '../entities/Permission';
|
||||||
|
import { Principal } from '../entities/Principal';
|
||||||
|
import { PermissionAction } from '../enums/PermissionAction';
|
||||||
|
import { PermissionTarget } from '../enums/PermissionTargets';
|
||||||
|
|
||||||
|
export class UpdatePermission {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The updated runner's id.
|
||||||
|
*/
|
||||||
|
@IsInt()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The permissions's principal's id.
|
||||||
|
*/
|
||||||
|
@IsObject()
|
||||||
|
@IsNotEmpty()
|
||||||
|
principal: Principal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The permissions's target.
|
||||||
|
*/
|
||||||
|
@IsNotEmpty()
|
||||||
|
target: PermissionTarget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The permissions's action.
|
||||||
|
*/
|
||||||
|
@IsNotEmpty()
|
||||||
|
action: PermissionAction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Permission object based on this.
|
||||||
|
*/
|
||||||
|
public async toPermission(): Promise<Permission> {
|
||||||
|
let newPermission: Permission = new Permission();
|
||||||
|
|
||||||
|
newPermission.principal = await this.getPrincipal();
|
||||||
|
newPermission.target = this.target;
|
||||||
|
newPermission.action = this.action;
|
||||||
|
|
||||||
|
return newPermission;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manages all the different ways a group can be provided.
|
||||||
|
*/
|
||||||
|
public async getPrincipal(): Promise<Principal> {
|
||||||
|
if (this.principal === undefined) {
|
||||||
|
throw new PermissionNeedsPrincipalError();
|
||||||
|
}
|
||||||
|
if (!isNaN(this.principal.id)) {
|
||||||
|
let principal = await getConnectionManager().get().getRepository(Principal).findOne({ id: this.principal.id });
|
||||||
|
if (!principal) { throw new PrincipalNotFoundError(); }
|
||||||
|
return principal;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new PrincipalWrongTypeError();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user