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

共享规则

提供的能力

@nocobase/app-plugin-authz-sharing-rules 共享规则为指定用户、团队等主体追加记录范围。它适合交接、跨团队协作或指定记录的临时共享;接收方仍需拥有相关业务操作权限。

应用负责规则管理页;运行时注册之外还需组合授权工厂,规则才能参与业务访问决策。

使用场景与示例

业务示例

例如销售甲需要把客户 A 交给销售乙协作。先确保乙具备客户读取操作,再创建面向乙的共享规则,为读取动作选择客户 A。乙获得该客户的读取范围,但不会因此获得修改权限或客户所有关联数据的权限。

先确认主体拥有目标操作,再配置范围;最后分别检查允许记录、范围外记录和直接 API 调用。业务查询必须落实授权服务返回的数据策略,规则才会影响实际查询。

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

纯文本
请使用 @nocobase/app-plugin-authz-sharing-rules,将客户 A 只读共享给销售乙,其他客户和修改权限保持不变。
保留已有授权扩展,接入规则管理页面及相应设置权限。
先检查主体是否拥有读取操作,再配置记录范围,不通过新增管理员权限绕过限制。
用普通用户验证允许记录、范围外记录和直接 API 请求。

完成标志:乙能读取客户 A,不能因此修改客户或读取其他未授权客户。

重要原理与实现

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

接入位置代码或配置变化界面与行为变化
插件数组与 server/config/authorization.ts注册运行时并组合 sharingRules()规则接口与决策扩展同时生效
应用规则管理页面接入选项、记录选择及受保护的保存接口管理者可以维护目标规则
业务查询与测试保留授权数据策略,增加不同主体的用例规则实际影响数据结果

接入与配置

在权限管理基础上注册本插件的 Client、Server 入口,执行迁移;还要将工厂加入应用的 server/config/authorization.ts:

TypeScript
import { sharingRules } from '@nocobase/app-plugin-authz-sharing-rules/server';

// 合并到现有授权配置,保留其他已启用的扩展。
plugins: [sharingRules()]

运行时注册负责语言资源和数据库迁移,配置工厂才负责安装规则能力与 HTTP 接口。漏掉工厂时,仅安装包不会使规则生效。

配置与使用规则

规则需要指定主体、目标资源、操作和记录选择。选择只能是指定记录 ID 或已注册的 recordAccess,不支持 all。需要向所有已具备操作权限的人开放共同记录时,使用默认数据范围。

规则管理接口位于 /api/authorization/sharingRules,提供列表、创建、更新和删除,以及选项、主体或记录选择所需的接口。应用负责管理页面,插件不自动注册页面。访问需要 settings:authorization.sharing-rules 的相应 read、create、update 或 delete 权限。

应用通过受保护的接口保存规则。可信服务端代码也可以使用授权服务上的 sharingRules API;自行封装 HTTP 接口时,需要保留权限检查与输入校验。

AI 开发的约束与验证

本插件的开发约束

  • 按指定主体与记录保存共享;选择不支持 all,也不能顺带开放所有关联记录。
  • 规则改变记录范围,不授予页面、操作或字段权限;检查服务端查询是否真正应用策略。
  • 用非 unrestricted 身份验证规则叠加、撤销和直接访问,不能只测超级管理员。

使用边界

规则不会授予页面、操作或字段权限,也不会自动打开关联记录。默认范围和共享范围合并后,仍受限制规则约束。unrestricted 身份跳过这些范围规则,因此不能只用超级管理员验证普通用户的结果。

相关文档:权限管理、默认数据范围、共享规则、限制规则。

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

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

NocoBase 文档助手

关于 NocoBase,你想了解什么?

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