收口 Phase 0 三处「声明未生效」: - 三级鉴权落地:权限集存 Redis(key 前缀隔离多项目),@RequirePermissions 挂到全部受控接口,super_admin 角色绕过权限码与 data_scope - 审计/登录日志自动落库:@AuditLog 装饰器 + 拦截器异步写入(写操作+登录登出),登录成功/失败均记 login_log(脱敏) - seed 脚本:一键初始化租户 touyun/用户 touyun/超管 super_admin/全量资源树(48 资源全量授权) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
/**
|
||
* 权限码单一事实源(细粒度 domain:action)。
|
||
* 控制器 @RequirePermissions 与 seed 资源树共用,避免漂移。
|
||
*/
|
||
export const Permissions = {
|
||
tenant: {
|
||
list: 'tenant:list',
|
||
create: 'tenant:create',
|
||
update: 'tenant:update',
|
||
delete: 'tenant:delete',
|
||
},
|
||
user: {
|
||
list: 'user:list',
|
||
create: 'user:create',
|
||
update: 'user:update',
|
||
delete: 'user:delete',
|
||
resetPwd: 'user:reset-pwd',
|
||
},
|
||
role: {
|
||
list: 'role:list',
|
||
create: 'role:create',
|
||
update: 'role:update',
|
||
delete: 'role:delete',
|
||
assignResource: 'role:assign-resource',
|
||
},
|
||
resource: {
|
||
list: 'resource:list',
|
||
create: 'resource:create',
|
||
update: 'resource:update',
|
||
delete: 'resource:delete',
|
||
},
|
||
org: {
|
||
list: 'org:list',
|
||
create: 'org:create',
|
||
update: 'org:update',
|
||
delete: 'org:delete',
|
||
},
|
||
dict: {
|
||
list: 'dict:list',
|
||
create: 'dict:create',
|
||
update: 'dict:update',
|
||
delete: 'dict:delete',
|
||
},
|
||
config: {
|
||
list: 'config:list',
|
||
create: 'config:create',
|
||
update: 'config:update',
|
||
delete: 'config:delete',
|
||
},
|
||
audit: { list: 'audit:list' },
|
||
loginLog: { list: 'login-log:list' },
|
||
} as const;
|
||
|
||
/** 全部权限码扁平列表(seed 授权与资源生成用)。 */
|
||
export const ALL_PERMISSIONS: string[] = Object.values(Permissions).flatMap((m) =>
|
||
Object.values(m),
|
||
);
|