From 145a08b1b4f0c8c7a389b04d7ef033e23641a5b7 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 18 Dec 2020 15:26:54 +0100 Subject: [PATCH] Now with cleaner participants in the responses ref #6 --- src/models/entities/Principal.ts | 3 ++ src/models/entities/User.ts | 6 +++ src/models/entities/UserGroup.ts | 6 +++ src/models/responses/ResponsePermission.ts | 6 +-- src/models/responses/ResponseUserGroup.ts | 45 ++++++++++++++++++++++ 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/models/responses/ResponseUserGroup.ts diff --git a/src/models/entities/Principal.ts b/src/models/entities/Principal.ts index f1242b5..8e74368 100644 --- a/src/models/entities/Principal.ts +++ b/src/models/entities/Principal.ts @@ -1,5 +1,6 @@ import { IsInt, IsOptional } from 'class-validator'; import { Entity, OneToMany, PrimaryGeneratedColumn, TableInheritance } from 'typeorm'; +import { ResponsePrincipal } from '../responses/ResponsePrincipal'; import { Permission } from './Permission'; /** @@ -21,4 +22,6 @@ export abstract class Principal { @IsOptional() @OneToMany(() => Permission, permission => permission.principal, { nullable: true }) permissions?: Permission[]; + + public abstract toResponse(): ResponsePrincipal; } \ No newline at end of file diff --git a/src/models/entities/User.ts b/src/models/entities/User.ts index 2b5b9b3..3c06e85 100644 --- a/src/models/entities/User.ts +++ b/src/models/entities/User.ts @@ -1,6 +1,8 @@ import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString, IsUUID } from "class-validator"; import { ChildEntity, Column, JoinTable, ManyToMany, OneToMany } from "typeorm"; import { config } from '../../config'; +import { ResponsePrincipal } from '../responses/ResponsePrincipal'; +import { ResponseUser } from '../responses/ResponseUser'; import { Permission } from './Permission'; import { Principal } from './Principal'; import { UserAction } from './UserAction'; @@ -126,4 +128,8 @@ export class User extends Principal { }) return final_permissions } + + public toResponse(): ResponsePrincipal { + return new ResponseUser(this); + } } diff --git a/src/models/entities/UserGroup.ts b/src/models/entities/UserGroup.ts index 21dfe25..c14f8fb 100644 --- a/src/models/entities/UserGroup.ts +++ b/src/models/entities/UserGroup.ts @@ -4,6 +4,8 @@ import { IsString } from "class-validator"; import { ChildEntity, Column } from "typeorm"; +import { ResponsePrincipal } from '../responses/ResponsePrincipal'; +import { ResponseUserGroup } from '../responses/ResponseUserGroup'; import { Principal } from './Principal'; /** @@ -27,4 +29,8 @@ export class UserGroup extends Principal { @IsOptional() @IsString() description?: string; + + public toResponse(): ResponsePrincipal { + return new ResponseUserGroup(this); + } } \ No newline at end of file diff --git a/src/models/responses/ResponsePermission.ts b/src/models/responses/ResponsePermission.ts index 1ce3161..824e83b 100644 --- a/src/models/responses/ResponsePermission.ts +++ b/src/models/responses/ResponsePermission.ts @@ -4,9 +4,9 @@ import { IsObject } from "class-validator"; import { Permission } from '../entities/Permission'; -import { Principal } from '../entities/Principal'; import { PermissionAction } from '../enums/PermissionAction'; import { PermissionTarget } from '../enums/PermissionTargets'; +import { ResponsePrincipal } from './ResponsePrincipal'; /** * Defines a track of given length. @@ -23,7 +23,7 @@ export class ResponsePermission { */ @IsObject() @IsNotEmpty() - principal: Principal; + principal: ResponsePrincipal; /** * The permissions's target. @@ -39,7 +39,7 @@ export class ResponsePermission { public constructor(permission: Permission) { this.id = permission.id; - this.principal = permission.principal; + this.principal = permission.principal.toResponse(); this.target = permission.target; this.action = permission.action; } diff --git a/src/models/responses/ResponseUserGroup.ts b/src/models/responses/ResponseUserGroup.ts new file mode 100644 index 0000000..1317c8f --- /dev/null +++ b/src/models/responses/ResponseUserGroup.ts @@ -0,0 +1,45 @@ +import { + IsArray, + + + IsNotEmpty, + + IsOptional, + IsString +} from "class-validator"; +import { Permission } from '../entities/Permission'; +import { UserGroup } from '../entities/UserGroup'; +import { ResponsePrincipal } from './ResponsePrincipal'; + +/** + * Defines a user response. +*/ +export class ResponseUserGroup extends ResponsePrincipal { + /** + * The group's name + */ + @IsNotEmpty() + @IsString() + name: string; + + /** + * The group's description + */ + @IsOptional() + @IsString() + description?: string; + + /** + * permissions + */ + @IsArray() + @IsOptional() + permissions: Permission[]; + + public constructor(group: UserGroup) { + super(group); + this.name = group.name; + this.description = group.description; + this.permissions = group.permissions; + } +}