feat: 角色管理UI扩展权限项至14个,种子数据自动迁移operator/viewer权限

This commit is contained in:
gitadmin 2026-05-14 16:51:11 +08:00
parent 1ae84294bb
commit a52241f4db
2 changed files with 25 additions and 6 deletions

View File

@ -13,13 +13,19 @@ interface Role {
const allPermissions = [ const allPermissions = [
{ key: 'tickets:read', label: '查看工单' }, { key: 'tickets:read', label: '查看工单' },
{ key: 'tickets:write', label: '编辑工单' }, { key: 'tickets:create', label: '手动建单' },
{ key: 'tickets:import', label: '导入工单' },
{ key: 'tickets:export', label: '导出工单' },
{ key: 'tickets:write', label: '编辑/删除工单' },
{ key: 'reports:read', label: '查看报告' }, { key: 'reports:read', label: '查看报告' },
{ key: 'reports:write', label: '编辑报告' }, { key: 'reports:download', label: '下载报告' },
{ key: 'reports:create', label: '新建报告' },
{ key: 'users:read', label: '查看用户' }, { key: 'users:read', label: '查看用户' },
{ key: 'users:write', label: '编辑用户' }, { key: 'users:write', label: '编辑用户' },
{ key: 'roles:read', label: '查看角色' }, { key: 'roles:read', label: '查看角色' },
{ key: 'roles:write', label: '编辑角色' }, { key: 'roles:write', label: '编辑角色' },
{ key: 'api-keys:read', label: '查看 API Key' },
{ key: 'api-keys:write', label: '编辑 API Key' },
] ]
export default function RolesPage() { export default function RolesPage() {

View File

@ -59,11 +59,24 @@ export function initDatabase(): void {
} }
const roles = [ const roles = [
{ name: 'admin', display_name: '管理员', permissions: '["*"]' }, { name: 'admin', display_name: '管理员', permissions: '["*"]' },
{ name: 'operator', display_name: '运维人员', permissions: '["tickets:read","tickets:write","reports:read"]' }, { name: 'operator', display_name: '运维人员', permissions: '["tickets:read","tickets:create","tickets:import","tickets:export","tickets:write","reports:read","reports:download","reports:create"]' },
{ name: 'viewer', display_name: '查看者', permissions: '["tickets:read","reports:read"]' }, { name: 'viewer', display_name: '查看者', permissions: '["tickets:read","tickets:export","reports:read","reports:download"]' },
] ]
for (const r of roles) { for (const r of roles) {
const ex = db.prepare('SELECT id FROM roles WHERE name = ?').get(r.name) const ex = db.prepare('SELECT id, permissions FROM roles WHERE name = ?').get(r.name) as { id: number; permissions: string } | undefined
if (!ex) db.prepare('INSERT INTO roles (name, display_name, permissions) VALUES (?, ?, ?)').run(r.name, r.display_name, r.permissions) if (!ex) {
db.prepare('INSERT INTO roles (name, display_name, permissions) VALUES (?, ?, ?)').run(r.name, r.display_name, r.permissions)
} else {
// 迁移:更新已有角色的权限(追加新权限,保留已有自定义)
const newPerms = JSON.parse(r.permissions) as string[]
let existingPerms: string[] = []
try { existingPerms = JSON.parse(ex.permissions) } catch {}
if (!existingPerms.includes('*')) {
for (const p of newPerms) {
if (!existingPerms.includes(p)) existingPerms.push(p)
}
db.prepare('UPDATE roles SET permissions = ? WHERE id = ?').run(JSON.stringify(existingPerms), ex.id)
}
}
} }
} }