Skip to content

Admin RBAC 权限目录

管理后台 RBAC 的权限 code 注册表与 catalog 查询,供 API、PermissionsGuard 与 Admin SPA 按钮级权限共用。

源码:packages/shared/src/permissions/

模块导出

导入路径用途
zcw-shared/permissions/catalog全部:code 常量、PERMISSION_GROUPS、catalog 查询、definePermissionGroup
zcw-shared/functions/auth/permissionSatisfies前后端一致的匹配规则

code 格式

{module}.{resource}.{action}

示例:

  • system.user.view / system.user.edit
  • business.product.view / business.product.edit
  • content.media.view / content.media.edit
  • ai.agent.view / ai.agent.edit

声明新权限

实现文件为 permissions/catalog.ts,与 constants/hybridConstants.ts 一样:一个源文件对应一个 export 路径,build 后自动出现在 package.json exports,无需额外配置。

catalog.ts 中添加一组 view/edit,并在同文件 PERMISSION_GROUPS 中注册:

typescript
export const fooPermissionGroup = definePermissionGroup({
  module: 'business',
  resource: 'foo',
  label: 'Foo',
  items: [
    { action: 'view', name: 'Foo 查看', description: '…' },
    { action: 'edit', name: 'Foo 编辑', description: '…' },
  ],
})
export const FooPermissions = fooPermissionGroup.codes

// PERMISSION_GROUPS 数组中追加 fooPermissionGroup.group

然后:

  1. packages/shared 执行 pnpm run build
  2. 发布新版本 zcw-shared
  3. API controller 添加 @RequirePermissions(FooPermissions.EDIT)
  4. Admin 页面使用 can(FooPermissions.EDIT) 控制按钮

API 侧可保留 src/services/foo/foo.permissions.ts 作为薄 re-export,避免大量改 import:

typescript
export { fooPermissionGroup, FooPermissions } from 'zcw-shared/permissions/catalog'

约定

  • 管理端 CRUD:GET → VIEW,POST/PUT/DELETE → EDIT
  • 编辑隐含查看:持有 *.edit 满足 *.view(见 permissionSatisfies
  • DB role_permissions.permission_code 必须与 catalog 中的 code 一致,或为 *

相关项目文档

  • API RBAC 服务:packages/api.zengchaowu.com/src/services/rbac/README.md
  • Admin SPA 403 与按钮权限:packages/admin-spa.zengchaowu.com/README.md