feat(users): 初始管理员可改显示名(登录名锁死 admin)+ 新增「提升为超级管理员」
站长诉求:想自定义 admin 账号的资料,但**必须保留 admin/admin123 作为应急登录**;
同时想用自己绑了微信的中文账号做日常管理。
按"哪些能改、哪些必须锁死"拆开处理:
1) server/api/admin/users/[id].put.ts —— 原来对 ID=1 **一律 403**(连显示名都改不了),
现在:
· 允许改:姓名(显示名)、年级、班级、状态;
· 锁死:登录名必须保持 admin(那就是 admin/admin123 的应急通道,改了就登不进去);
· 锁死:角色不能动(防止把自己降权导致没人能管站点);
· 锁死:密码不在这里改(避免被其它管理员顺手重置;要改用它登录后去「设置」里改)。
2) 新增 POST /api/admin/users/{id}/promote-super —— 把某个账号提升为超级管理员。
之所以单开接口而不是放开通用编辑接口的 role:原 `canChangeRoleOf()` 明确禁止提升为
SUPER_ADMIN,两个前端的角色下拉也故意不给这一项。这里是**显式、可审计**的通道:
仅 SUPER_ADMIN 可调、不能提升自己、已经是超管的会提示、成功后清该用户认证缓存。
前端(小程序)配套:用户管理操作菜单改成 {label, run} 数组(有权限时才出现"提升为超级管理员",
不再靠写死 tapIndex),点击有二次确认并列出会拿到的权限;编辑初始管理员时登录名输入框 disabled
并显示原因,姓名照常可改。
This commit is contained in:
@@ -55,12 +55,37 @@ export default defineEventHandler(async (event) => {
|
||||
const currentLevel = getRoleLevel(user.role)
|
||||
const targetLevel = getRoleLevel(targetUser.role)
|
||||
|
||||
// 1. 禁止修改系统初始超级管理员 (ID: 1)
|
||||
/*
|
||||
* 系统初始超级管理员(ID=1,登录名 admin)的处理 —— 第 90 轮按站长要求放宽。
|
||||
*
|
||||
* 原来这里是"一律禁止修改"(403 无法修改系统初始超级管理员),
|
||||
* 结果是连它的**显示名都改不了**(站长想把界面上的 admin 改成自己的名字)。
|
||||
* 现在按"哪些能改、哪些必须锁死"拆开:
|
||||
* · 允许:姓名(显示名)、年级、班级、状态;
|
||||
* · 锁死:**登录名必须保持 admin** —— 那是 admin/admin123 的应急登录通道,改了就没了;
|
||||
* · 锁死:角色不能动(不能把自己降权,否则没人能管站点);
|
||||
* · 锁死:密码不在这里改(避免被其它管理员顺手重置)。
|
||||
*/
|
||||
if (targetUser.id === 1) {
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
statusMessage: '无法修改系统初始超级管理员'
|
||||
})
|
||||
const nextUsername = String(username || '').trim()
|
||||
if (nextUsername && nextUsername !== targetUser.username) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: '初始超级管理员的登录名必须保持 admin(应急登录通道,改了就无法用它登录)'
|
||||
})
|
||||
}
|
||||
if (role && role !== targetUser.role) {
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
statusMessage: '不能修改初始超级管理员的角色'
|
||||
})
|
||||
}
|
||||
if (password) {
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
statusMessage: '不能在用户管理中重置初始超级管理员的密码(请用它登录后在「设置」里自行修改)'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 禁止对自身进行任何用户管理操作(包括角色、资料、状态、密码等)
|
||||
|
||||
Reference in New Issue
Block a user