feat: 角色管理UI扩展权限项至14个,种子数据自动迁移operator/viewer权限
This commit is contained in:
parent
1ae84294bb
commit
a52241f4db
|
|
@ -13,13 +13,19 @@ interface Role {
|
|||
|
||||
const allPermissions = [
|
||||
{ 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:write', label: '编辑报告' },
|
||||
{ key: 'reports:download', label: '下载报告' },
|
||||
{ key: 'reports:create', label: '新建报告' },
|
||||
{ key: 'users:read', label: '查看用户' },
|
||||
{ key: 'users:write', label: '编辑用户' },
|
||||
{ key: 'roles:read', label: '查看角色' },
|
||||
{ key: 'roles:write', label: '编辑角色' },
|
||||
{ key: 'api-keys:read', label: '查看 API Key' },
|
||||
{ key: 'api-keys:write', label: '编辑 API Key' },
|
||||
]
|
||||
|
||||
export default function RolesPage() {
|
||||
|
|
|
|||
|
|
@ -59,11 +59,24 @@ export function initDatabase(): void {
|
|||
}
|
||||
const roles = [
|
||||
{ name: 'admin', display_name: '管理员', permissions: '["*"]' },
|
||||
{ name: 'operator', display_name: '运维人员', permissions: '["tickets:read","tickets:write","reports:read"]' },
|
||||
{ name: 'viewer', display_name: '查看者', permissions: '["tickets:read","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","tickets:export","reports:read","reports:download"]' },
|
||||
]
|
||||
for (const r of roles) {
|
||||
const ex = db.prepare('SELECT id FROM roles WHERE name = ?').get(r.name)
|
||||
if (!ex) db.prepare('INSERT INTO roles (name, display_name, permissions) VALUES (?, ?, ?)').run(r.name, r.display_name, r.permissions)
|
||||
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)
|
||||
} 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue