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.editbusiness.product.view/business.product.editcontent.media.view/content.media.editai.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然后:
packages/shared执行pnpm run build- 发布新版本
zcw-shared - API controller 添加
@RequirePermissions(FooPermissions.EDIT) - 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