diff --git a/tone-page-server/src/admin/admin.module.ts b/tone-page-server/src/admin/admin.module.ts index 0e5c542..812b7bd 100644 --- a/tone-page-server/src/admin/admin.module.ts +++ b/tone-page-server/src/admin/admin.module.ts @@ -8,6 +8,7 @@ import { UserModule } from 'src/user/user.module'; import { RoleModule } from 'src/role/role.module'; import { AdminRoleController } from './controller/admin-role.controller'; import { AdminPermissionController } from './controller/admin-permission.controller'; +import { AdminRolePermissionController } from './controller/admin-role-permission.controller'; @Module({ imports: [ @@ -22,6 +23,7 @@ import { AdminPermissionController } from './controller/admin-permission.control AdminUserController, AdminRoleController, AdminPermissionController, + AdminRolePermissionController, ], providers: [ AdminUserService, diff --git a/tone-page-server/src/admin/controller/admin-role-permission.controller.ts b/tone-page-server/src/admin/controller/admin-role-permission.controller.ts new file mode 100644 index 0000000..cc62760 --- /dev/null +++ b/tone-page-server/src/admin/controller/admin-role-permission.controller.ts @@ -0,0 +1,37 @@ +import { Body, Controller, Delete, Get, Param, ParseUUIDPipe, Post } from "@nestjs/common"; +import { PermissionService } from "src/role/services/permission.service"; +import { RolePermissionService } from "src/role/services/role-permission.service"; +import { SetRolePermissionsDto } from "../dto/admin-role-permission/set-role-permissions.dto"; + +@Controller('admin/roles/:roleId/permission') +export class AdminRolePermissionController { + + constructor( + private readonly rolePermissionService: RolePermissionService, + private readonly permissionService: PermissionService, + ) { } + + @Get() + async getRolePermissions( + @Param('roleId', new ParseUUIDPipe({ version: '4' })) roleId: string, + ) { + const permissionIds = await this.rolePermissionService.findPermissionIdsByRoleIds([roleId]); + return await this.permissionService.findPermissionByIds(permissionIds); + } + + @Post() + async setRolePermissions( + @Param('roleId', new ParseUUIDPipe({ version: '4' })) roleId: string, + @Body() dto: SetRolePermissionsDto, + ) { + return await this.rolePermissionService.addRolePermissions(roleId, dto.permissionIds); + } + + @Delete() + async DeleteRolePermissionsDto( + @Param('roleId', new ParseUUIDPipe({ version: '4' })) roleId: string, + @Body() dto: SetRolePermissionsDto, + ) { + return await this.rolePermissionService.deleteRolePermissions(roleId, dto.permissionIds); + } +} \ No newline at end of file diff --git a/tone-page-server/src/admin/dto/admin-role-permission/delete-role-permissions.dto.ts b/tone-page-server/src/admin/dto/admin-role-permission/delete-role-permissions.dto.ts new file mode 100644 index 0000000..48dfb6c --- /dev/null +++ b/tone-page-server/src/admin/dto/admin-role-permission/delete-role-permissions.dto.ts @@ -0,0 +1,8 @@ +import { ArrayMinSize, IsArray, IsUUID } from "class-validator"; + +export class DeleteRolePermissionsDto { + @IsArray() + @ArrayMinSize(1) + @IsUUID('4', { each: true }) + permissionIds: string[]; +} \ No newline at end of file diff --git a/tone-page-server/src/admin/dto/admin-role-permission/set-role-permissions.dto.ts b/tone-page-server/src/admin/dto/admin-role-permission/set-role-permissions.dto.ts new file mode 100644 index 0000000..cfe8b3f --- /dev/null +++ b/tone-page-server/src/admin/dto/admin-role-permission/set-role-permissions.dto.ts @@ -0,0 +1,8 @@ +import { ArrayMinSize, IsArray, IsUUID } from "class-validator"; + +export class SetRolePermissionsDto { + @IsArray() + @ArrayMinSize(1) + @IsUUID('4', { each: true }) + permissionIds: string[]; +} \ No newline at end of file diff --git a/tone-page-server/src/role/services/permission.service.ts b/tone-page-server/src/role/services/permission.service.ts index bf30976..6a6ee84 100644 --- a/tone-page-server/src/role/services/permission.service.ts +++ b/tone-page-server/src/role/services/permission.service.ts @@ -24,6 +24,14 @@ export class PermissionService { }) } + async findPermissionByIds(permissionIds: string[]): Promise { + return this.permissionRepository.find({ + where: { + id: In(permissionIds), + } + }); + } + async list() { return this.permissionRepository.find(); }