Admin RBAC 权限目录
管理后台 RBAC 的权限 code 注册表与 catalog 查询,供 API、PermissionsGuard 与 Admin SPA 按钮级权限共用。
源码:packages/shared/src/permissions/。
模块导出
| 导入路径 | 用途 |
|---|---|
@zengchaowu/shared/permissions/catalog | 全部:code 常量、PERMISSION_GROUPS、catalog 查询、definePermissionGroup |
@zengchaowu/shared/permissions/basePermissions | 默认 user 角色种子 DEFAULT_USER_ROLE_PERMISSION_CODES(写入 DB,非鉴权兜底) |
@zengchaowu/shared/permissions/adminRolePermissions | 默认 admin 角色种子 listAdminScopePermissionCodes()(全部 admin_*) |
@zengchaowu/shared/permissions/defaultRoles | 默认角色 id(超级管理员 / 普通用户) |
@zengchaowu/shared/functions/auth/permissionSatisfies | 前后端一致的匹配规则(不合并隐式权限) |
code 格式
{module}.{resource}.{action}示例:
- 八码(有 owner):
business.order.self_*+business.order.admin_*(后续可加team_*) - 四码(无 owner)= 八码抬权子集:仅
system.user.admin_view|admin_create|admin_edit|admin_delete
声明新权限
实现文件为 permissions/catalog.ts。
typescript
// 仅 admin_* 四码(无本人范围,不进默认 user 种子)
export const fooPermissionGroup = defineAdminOnlyPermissionGroup({
module: 'business',
resource: 'foo',
label: 'Foo',
})
export const FooPermissions = fooPermissionGroup.codes
// 八码:self_* + admin_*;本人四码加入 DEFAULT_USER_ROLE_PERMISSION_CODES
export const barPermissionGroup = defineConsumerAdminPermissionGroup({
module: 'business',
resource: 'bar',
label: 'Bar',
})
export const BarPermissions = barPermissionGroup.codes然后:
- 若属默认普通人能力,把本人四码(
SELF_VIEW等)加入basePermissions.ts的DEFAULT_USER_ROLE_PERMISSION_CODES;admin_*会随 catalog 进入超级管理员种子,不必手抄 packages/shared执行pnpm run build- API:
@RequirePermissions;匿名面用@Public() - 重启 API,依赖启动种子补齐
user/admin角色权限后重新登录
约定
- 权限只来自角色;无角色用户无法访问需鉴权资源
- 写蕴含读:同 scope 下
*_create|edit|delete→*_view(self/team/admin) - 数据范围:
self_*本人;admin_*抬权(有 owner 时=全站,无 owner 时=整份资源);预留team_* - DB
role_permissions.permission_code必须与 catalog 一致。*仅根用户运行时拥有,不能分配给角色 - 默认
user角色种子见DEFAULT_USER_ROLE_PERMISSION_CODES(启动写入,可运营调整) - 默认
admin角色种子见listAdminScopePermissionCodes()(启动写入全部admin_*)
相关项目文档
- API RBAC 服务:
packages/api.zengchaowu.com/src/services/rbac/README.md - Admin 403 与按钮权限:
packages/admin.zengchaowu.com/README.md