From 2f86362f4bee0e083e8295e7ea8e902d7c3f96c9 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Thu, 8 May 2025 23:13:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=94=A8=E6=88=B7=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tone-page-server/src/admin/admin.module.ts | 2 + .../controller/admin-user-role.controller.ts | 43 +++++++++++++++++++ .../admin-user-role/create-user-role.dto.ts | 13 ++++++ .../admin-user-role/delete-user-role.dto.ts | 6 +++ .../src/role/services/user-role.service.ts | 10 +++++ 5 files changed, 74 insertions(+) create mode 100644 tone-page-server/src/admin/controller/admin-user-role.controller.ts create mode 100644 tone-page-server/src/admin/dto/admin-user-role/create-user-role.dto.ts create mode 100644 tone-page-server/src/admin/dto/admin-user-role/delete-user-role.dto.ts diff --git a/tone-page-server/src/admin/admin.module.ts b/tone-page-server/src/admin/admin.module.ts index 812b7bd..19df728 100644 --- a/tone-page-server/src/admin/admin.module.ts +++ b/tone-page-server/src/admin/admin.module.ts @@ -9,6 +9,7 @@ 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'; +import { AdminUserRoleController } from './controller/admin-user-role.controller'; @Module({ imports: [ @@ -24,6 +25,7 @@ import { AdminRolePermissionController } from './controller/admin-role-permissio AdminRoleController, AdminPermissionController, AdminRolePermissionController, + AdminUserRoleController, ], providers: [ AdminUserService, diff --git a/tone-page-server/src/admin/controller/admin-user-role.controller.ts b/tone-page-server/src/admin/controller/admin-user-role.controller.ts new file mode 100644 index 0000000..6d07430 --- /dev/null +++ b/tone-page-server/src/admin/controller/admin-user-role.controller.ts @@ -0,0 +1,43 @@ +import { Body, Controller, Delete, Get, Param, ParseUUIDPipe, Post } from "@nestjs/common"; +import { RoleService } from "src/role/services/role.service"; +import { UserRoleService } from "src/role/services/user-role.service"; +import { CreateUserRoleDto } from "../dto/admin-user-role/create-user-role.dto"; +import { DeleteUserRoleDto } from "../dto/admin-user-role/delete-user-role.dto"; + +@Controller('admin/users/:userId/role') +export class AdminUserRoleController { + + constructor( + private readonly userRoleService: UserRoleService, + private readonly roleService: RoleService, + ) { } + + @Get() + async getUserRoles( + @Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string, + ) { + const userRoleIds = await this.userRoleService.findRoleIdsByUserId(userId); + return await this.roleService.findRolesByRoleIds(userRoleIds); + } + + @Post() + async setUserRoles( + @Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string, + @Body() dto: CreateUserRoleDto, + ) { + return this.userRoleService.addUserRole({ + userId, + roleId: dto.roleId, + isEnabled: dto.isEnabled, + expiredAt: dto.expiredAt, + }); + } + + @Delete() + async deleteUserRoles( + @Param('userId', new ParseUUIDPipe({ version: '4' })) userId: string, + @Body() dto: DeleteUserRoleDto, + ) { + return this.userRoleService.deleteUserRole(userId, dto.roleId); + } +} \ No newline at end of file diff --git a/tone-page-server/src/admin/dto/admin-user-role/create-user-role.dto.ts b/tone-page-server/src/admin/dto/admin-user-role/create-user-role.dto.ts new file mode 100644 index 0000000..a5b3258 --- /dev/null +++ b/tone-page-server/src/admin/dto/admin-user-role/create-user-role.dto.ts @@ -0,0 +1,13 @@ +import { IsBoolean, IsDateString, IsOptional, IsUUID } from "class-validator"; + +export class CreateUserRoleDto { + @IsUUID('4') + roleId: string; + + @IsBoolean() + isEnabled: boolean; + + @IsOptional() + @IsDateString() + expiredAt?: Date; +} \ No newline at end of file diff --git a/tone-page-server/src/admin/dto/admin-user-role/delete-user-role.dto.ts b/tone-page-server/src/admin/dto/admin-user-role/delete-user-role.dto.ts new file mode 100644 index 0000000..dcf1691 --- /dev/null +++ b/tone-page-server/src/admin/dto/admin-user-role/delete-user-role.dto.ts @@ -0,0 +1,6 @@ +import { IsUUID } from "class-validator"; + +export class DeleteUserRoleDto { + @IsUUID('4') + roleId: string; +} \ No newline at end of file diff --git a/tone-page-server/src/role/services/user-role.service.ts b/tone-page-server/src/role/services/user-role.service.ts index 225296c..4b7d1ad 100644 --- a/tone-page-server/src/role/services/user-role.service.ts +++ b/tone-page-server/src/role/services/user-role.service.ts @@ -10,6 +10,16 @@ export class UserRoleService { private readonly userRoleRepository: Repository, ) { } + async findRoleIdsByUserId(userId: string): Promise { + const userRoles = await this.userRoleRepository.find({ + where: { + userId, + } + }); + + return userRoles.map(ur => ur.roleId); + } + async findValidRoleIdsByUserId(userId: string): Promise { return (await this.findValidRolesByUserId(userId)).map(ur => ur.roleId); }