Core · 使用插件 · 权限与数据访问

权限管理

提供的能力

@nocobase/app-plugin-authorization 提供应用授权服务、权限集、页面和设置项权限,以及数据库字段、记录和关联访问策略。适合控制“谁能打开某个页面、执行某个业务操作、访问哪些数据”。

应用声明业务资源与管理界面,插件提供授权决策及可落实到查询中的数据策略。

配置权限

对象控制内容
权限集将一组授权分配给用户等主体
page页面访问,例如打开订单页
settings设置项的读取、创建、修改等管理操作
composite业务动作及其依赖的数据、字段和操作
database.collection已接入权限模型的 Collection 及其数据策略

资源和操作需要先由应用或插件声明,才能正确授权。业务 Collection 必须通过授权服务注册;单纯存在于数据库中不等于已接入权限模型。

默认配置的 root 权限集具有 unrestricted 权限,应与普通业务角色分开。当前实现将 Member 作为新建普通账号的显式角色分配,不能把它理解成所有登录用户永远隐式拥有的权限。

使用场景与示例

示例:订单查看与修改

  1. 应用声明“查看订单”和“修改订单”业务能力,明确所需字段与记录范围。
  2. 给客服角色授予查看,给订单负责人授予相应修改能力。
  3. 页面用路由 authz 和 useCan 呈现入口、按钮;API 在服务端重新检查操作。
  4. 查询通过 authz.database.policyFor(...) 或 authorizeRepository(...) 等公开接口落实记录与字段策略。
  5. 用不同角色检查列表、详情、关联数据和直接 API 请求。

只检查“有查看订单权限”后直接执行不受限制的数据库查询,会丢失记录和字段限制。菜单隐藏、按钮禁用也不能代替服务端授权。

开发提示词(交给当前应用目录中的 Coding Agent):

纯文本
请使用权限管理插件,为订单增加查看与修改权限。
声明页面和业务操作,复用当前角色,不给普通用户追加 root 或无限制权限。
页面按权限显示按钮,服务端同时校验操作、记录与字段范围。
用只读、可修改和无权用户验证列表、详情、关联数据及直接 API 请求。

完成标志:只读用户能读取允许订单但不能修改;其他记录和受限字段不会通过接口泄露。

重要原理与实现

以下是实现本例时的接入位置与预期界面变化;它们是开发说明,具体文件名沿用当前应用结构。

接入位置代码或配置变化界面与行为变化
server/config/authorization.ts 与资源声明注册业务 Collection、操作及字段依赖管理页可选择真实业务能力
业务服务和 Repository 查询应用授权返回的数据策略列表、详情和写入遵循相同范围
页面路由与操作按钮使用 authz、useCan,保留接口校验页面入口和操作可见性符合角色

接入与入口

在身份认证之后注册 Client 和 Server 插件,执行迁移与种子数据。应用在 server/config/authorization.ts 中组合配置,通过 /server 的 authorizationToken 使用授权服务。

插件提供 /api/authorization 接口、AuthorizationClient 和 useCan 等客户端能力,不直接注册权限管理页面。应用接入自己的管理页,并声明可分配的业务能力。

数据范围扩展

需要统一或细化记录范围时,按业务分别配置:

这些规则不会创建操作权限。管理界面中的分组只是展示组织,也不会改变授权结果。相关安装操作见管理插件。

AI 开发的约束与验证

本插件的开发约束

  • 声明业务能力后再授权,不能把未接入权限模型的数据库查询当作已受保护。
  • 检查页面、操作、字段、记录与关联访问,避免一个布尔 can 判断后执行无限制查询。
  • 用普通角色和直接 API 请求验收;涉及角色 Seed 时检查是否意外扩大现有用户权限。

上述检查是接入后的验收要求,不表示本文已完成运行验证。让 Agent 报告实际改动、执行过的检查和未验证项;项目指引、Skills 与通用检查流程见持续开发应用和测试。

源码依据:插件公开入口与实现。

NocoBase 文档助手

关于 NocoBase,你想了解什么?

每次提问独立回答,不会参考之前的问答。请提供完整背景。