From ff3a5b4545d0359cd4af94229bb71c023888a860 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 18 Dec 2020 15:49:42 +0100 Subject: [PATCH] User deletion now also delete's the users permissons ref #6 --- src/controllers/UserController.ts | 14 ++++++++------ src/models/entities/Principal.ts | 5 ++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index ae84f47..e460ad1 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -8,6 +8,7 @@ import { CreateUser } from '../models/actions/CreateUser'; import { User } from '../models/entities/User'; import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseUser } from '../models/responses/ResponseUser'; +import { PermissionController } from './PermissionController'; @JsonController('/users') @@ -86,15 +87,16 @@ export class UserController { @OnUndefined(204) @OpenAPI({ description: 'Delete a specified runner (if it exists).' }) async remove(@Param("id") id: number, @QueryParam("force") force: boolean) { - let runner = await this.userRepository.findOne({ id: id }); - if (!runner) { return null; } - const responseUser = await this.userRepository.findOne(runner, { relations: ['permissions', 'groups'] }); + let user = await this.userRepository.findOne({ id: id }); + if (!user) { return null; } + const responseUser = await this.userRepository.findOne({ id: id }, { relations: ['permissions', 'groups'] });; - if (!runner) { - throw new UserNotFoundError(); + const permissionControler = new PermissionController(); + for (let permission of responseUser.permissions) { + await permissionControler.remove(permission.id, true); } - await this.userRepository.delete(runner); + await this.userRepository.delete(user); return new ResponseUser(responseUser); } } diff --git a/src/models/entities/Principal.ts b/src/models/entities/Principal.ts index 8e74368..618e3db 100644 --- a/src/models/entities/Principal.ts +++ b/src/models/entities/Principal.ts @@ -1,4 +1,4 @@ -import { IsInt, IsOptional } from 'class-validator'; +import { IsInt } from 'class-validator'; import { Entity, OneToMany, PrimaryGeneratedColumn, TableInheritance } from 'typeorm'; import { ResponsePrincipal } from '../responses/ResponsePrincipal'; import { Permission } from './Permission'; @@ -19,9 +19,8 @@ export abstract class Principal { /** * permissions */ - @IsOptional() @OneToMany(() => Permission, permission => permission.principal, { nullable: true }) - permissions?: Permission[]; + permissions: Permission[]; public abstract toResponse(): ResponsePrincipal; } \ No newline at end of file