Merge pull request '移除删除账号功能' (#15)
This commit is contained in:
@@ -198,28 +198,6 @@ export class RbacController {
|
||||
}
|
||||
}
|
||||
|
||||
@Delete('users/:id')
|
||||
@RequirePermission('user:delete')
|
||||
async deleteUser(@Param('id') id: string, @Request() req: any) {
|
||||
const { ipAddress, userAgent } = extractRequestInfo(req);
|
||||
try {
|
||||
const result = await this.rbacService.deleteUser(+id);
|
||||
await this.logService.log({
|
||||
userId: req.user?.id,
|
||||
username: req.user?.username,
|
||||
module: '账号',
|
||||
action: '删除账号',
|
||||
targetId: +id,
|
||||
targetType: 'user',
|
||||
ipAddress,
|
||||
userAgent,
|
||||
});
|
||||
return result;
|
||||
} catch (e: any) {
|
||||
throw new BadRequestException(e.message);
|
||||
}
|
||||
}
|
||||
|
||||
@Put('users/:id/archive')
|
||||
@RequirePermission('user:edit')
|
||||
async archiveUser(@Param('id') id: string) {
|
||||
|
||||
@@ -70,7 +70,6 @@ const PRESET_PERMISSIONS: Array<{ code: string; name: string; group: string }> =
|
||||
{ code: 'user:view', name: '查看用户', group: 'user' },
|
||||
{ code: 'user:create', name: '创建用户', group: 'user' },
|
||||
{ code: 'user:edit', name: '编辑用户', group: 'user' },
|
||||
{ code: 'user:delete', name: '删除用户', group: 'user' },
|
||||
{ code: 'user:reset-password', name: '重置密码', group: 'user' },
|
||||
{ code: 'role:view', name: '查看角色', group: 'role' },
|
||||
{ code: 'role:create', name: '创建角色', group: 'role' },
|
||||
@@ -250,7 +249,12 @@ export class RbacService {
|
||||
await this.permRepo.save(this.permRepo.create(p));
|
||||
}
|
||||
}
|
||||
const allPerms = await this.permRepo.find();
|
||||
const deprecatedUserDeletePermission = await this.permRepo.findOne({
|
||||
where: { code: 'user:delete' },
|
||||
});
|
||||
const allPerms = (await this.permRepo.find()).filter(
|
||||
(permission) => permission.code !== 'user:delete',
|
||||
);
|
||||
|
||||
// Step 2: 幂等插入预置角色
|
||||
for (const r of PRESET_ROLES) {
|
||||
@@ -271,6 +275,19 @@ export class RbacService {
|
||||
}
|
||||
const allRoles = await this.roleRepo.find({ relations: ['permissions', 'users'] });
|
||||
|
||||
if (deprecatedUserDeletePermission) {
|
||||
for (const role of allRoles) {
|
||||
const permissions = role.permissions ?? [];
|
||||
if (permissions.some((permission) => permission.id === deprecatedUserDeletePermission.id)) {
|
||||
role.permissions = permissions.filter(
|
||||
(permission) => permission.id !== deprecatedUserDeletePermission.id,
|
||||
);
|
||||
await this.roleRepo.save(role);
|
||||
}
|
||||
}
|
||||
await this.permRepo.remove(deprecatedUserDeletePermission);
|
||||
}
|
||||
|
||||
// Step 3: 合并旧角色并构建新的职责权限矩阵
|
||||
for (const preset of PRESET_ROLES) {
|
||||
const matchesPreset = (role: Role) =>
|
||||
@@ -564,15 +581,6 @@ export class RbacService {
|
||||
return { message: '已恢复为学员' };
|
||||
}
|
||||
|
||||
async deleteUser(id: number) {
|
||||
const user = await this.userRepo.findOne({ where: { id } });
|
||||
if (!user) throw new Error('用户不存在');
|
||||
if (user.username === 'admin') throw new Error('不能删除默认管理员');
|
||||
if (!user.isArchived) throw new Error('请先归档再删除');
|
||||
await this.userRepo.remove(user);
|
||||
return { message: '用户已删除' };
|
||||
}
|
||||
|
||||
// ---- 用户资料 ----
|
||||
|
||||
async getUserProfile(id: number) {
|
||||
|
||||
Reference in New Issue
Block a user