63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
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 updatePermission(permission: Permission): Promise<Permission> {
|
|
permission.principal = await this.getPrincipal();
|
|
permission.target = this.target;
|
|
permission.action = this.action;
|
|
|
|
return permission;
|
|
}
|
|
|
|
/**
|
|
* 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();
|
|
}
|
|
} |