完成用户权限管理

This commit is contained in:
2025-05-08 23:13:24 +08:00
parent 448a7b48ba
commit 2f86362f4b
5 changed files with 74 additions and 0 deletions

View File

@@ -9,6 +9,7 @@ import { RoleModule } from 'src/role/role.module';
import { AdminRoleController } from './controller/admin-role.controller'; import { AdminRoleController } from './controller/admin-role.controller';
import { AdminPermissionController } from './controller/admin-permission.controller'; import { AdminPermissionController } from './controller/admin-permission.controller';
import { AdminRolePermissionController } from './controller/admin-role-permission.controller'; import { AdminRolePermissionController } from './controller/admin-role-permission.controller';
import { AdminUserRoleController } from './controller/admin-user-role.controller';
@Module({ @Module({
imports: [ imports: [
@@ -24,6 +25,7 @@ import { AdminRolePermissionController } from './controller/admin-role-permissio
AdminRoleController, AdminRoleController,
AdminPermissionController, AdminPermissionController,
AdminRolePermissionController, AdminRolePermissionController,
AdminUserRoleController,
], ],
providers: [ providers: [
AdminUserService, AdminUserService,

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,6 @@
import { IsUUID } from "class-validator";
export class DeleteUserRoleDto {
@IsUUID('4')
roleId: string;
}

View File

@@ -10,6 +10,16 @@ export class UserRoleService {
private readonly userRoleRepository: Repository<UserRole>, private readonly userRoleRepository: Repository<UserRole>,
) { } ) { }
async findRoleIdsByUserId(userId: string): Promise<string[]> {
const userRoles = await this.userRoleRepository.find({
where: {
userId,
}
});
return userRoles.map(ur => ur.roleId);
}
async findValidRoleIdsByUserId(userId: string): Promise<string[]> { async findValidRoleIdsByUserId(userId: string): Promise<string[]> {
return (await this.findValidRolesByUserId(userId)).map(ur => ur.roleId); return (await this.findValidRolesByUserId(userId)).map(ur => ur.roleId);
} }