NocoBase 权限配置实战:ACL 通用权限、数据表权限与角色并集的完整指南

发布时间:2026/9/18 3:58:48
NocoBase 权限配置实战:ACL 通用权限、数据表权限与角色并集的完整指南 NocoBase 权限配置实战ACL 通用权限、数据表权限与角色并集的完整指南【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobaseNocoBase 内置了基于角色的访问控制RBAC体系由nocobase/plugin-acl插件实现。本篇以《权限配置》官方文档为核心深入讲解如何在用户与权限管理中心完成通用权限、全局操作权限、数据表操作权限、菜单访问权限与插件配置权限的设置并结合仓库源码剖析底层 ACL 实现、内置角色默认策略与角色并集合并规则帮助你在实际业务系统中快速搭建安全、精细、可运维的权限模型。权限模型总览NocoBase 的权限体系以「角色」为中心围绕四个维度展开通用权限控制界面配置、插件管理等全局性系统能力全局操作权限按操作类型对所有数据表生效的默认策略数据表操作权限针对单个数据表细化操作与字段级权限优先级高于全局菜单与插件配置权限控制界面可见性与插件后台管理入口。权限的最终判定由服务端 ACLAccess Control List完成数据库中的角色、资源、操作配置会在应用启动时被写入内存中的 ACL 实例每次请求经过认证后按当前角色进行匹配。整个插件的数据模型定义在 roles.ts角色表以及rolesResources、rolesResourcesActions、rolesResourcesScopes等集合中服务端入口实现见 server.ts。通用权限配置通用权限面向角色的系统级能力在权限配置界面的系统Tab 中完成共包含以下五项配置项作用默认状态允许配置界面是否允许用户配置界面。激活后出现 UI 配置按钮admin 角色默认启用允许安装、激活、禁用插件是否允许启用/禁用插件。激活后用户可访问插件管理器界面admin 角色默认启用允许配置插件是否允许配置插件参数或管理插件后台数据admin 角色默认启用允许清除缓存重启应用系统运维权限清空缓存、重启应用。激活后相关操作按钮出现在个人中心默认不启用新增菜单项默认允许访问新建的菜单默认允许访问默认开启这些配置在数据模型层面对应角色的allowConfigure允许配置界面、allowNewMenu新菜单默认允许字段与snippets权限片段字段见 roles.ts。其中允许安装、激活、禁用插件与允许配置插件属于插件管理权限通过snippets中的pm、pm.*片段控制前端界面在 GeneralPermissions.tsx 中读取角色snippets并渲染对应开关。从源码看系统在初始化安装时beforeInstallPlugin钩子见 server.ts会预置三个内置角色root隐藏角色拥有ui.*、pm、pm.*全部片段等同超级管理员adminallowConfigure: true、allowNewMenu: true策略允许create/view/update/destroy全部操作并拥有ui.*、pm、pm.*片段member默认角色default: true策略仅允许view:own查看自己的数据片段为!ui.*、!pm、!pm.*显式禁止界面与插件管理。因此文档中admin 角色默认启用前三项、默认不启用清除缓存的表述与admin角色的初始化字段一一对应。值得注意的是 root 与 admin 均默认不启用允许清除缓存重启应用这属于更敏感的系统运维能力需要按需手动开放。全局操作权限全局操作权限对所有数据表生效按操作类型划分并支持两种数据范围维度所有数据允许对整个数据表执行该操作自己的数据仅允许处理自己创建createdById指向当前用户的数据。在实现层面全局策略存储在角色的strategyJSON 字段中见 roles.ts。系统同时预置了两个数据范围Scope定义在 server.tsall全部数据scope: {}空条件即不限制own自己的数据scope: { createdById: {{ ctx.state.currentUser.id }} }通过模板表达式在运行时绑定当前登录用户。全局权限可以理解为默认兜底策略当一个数据表没有单独配置权限时就沿用全局配置的结果。数据表操作权限数据表操作权限在全局权限的基础上进一步细化可针对每个数据表的资源访问做个别配置分为操作权限与字段权限两个方面。操作权限操作权限覆盖添加、查看、编辑、删除、导出和导入六类操作同样按照数据范围所有数据 / 自己的数据配置。例如可以配置订单表仅允许查看和编辑自己的数据不允许删除和导出从而实现精细化的数据治理。字段权限字段权限允许对每个字段在不同操作下分别配置权限例如某些字段只允许查看、不允许编辑。支持的操作维度包括查看控制字段在区块中是否可见编辑控制字段是否可以编辑保存更新添加控制字段在新增表单中是否可选填创建导出控制字段是否可以导出导入控制字段是否支持导入。从源码看字段权限最终以fields数组写入dataSourcesRolesResourcesActions角色资源操作表。服务端还做了两项自动化处理一是新建字段时自动把新字段追加到已有该资源权限配置的fields列表中、删除字段时自动移除见 server.ts保证字段级权限始终与数据表 schema 同步二是view/export动作下发字段权限时会把关联字段从fields中拆出并转为appends确保关系字段按目标表权限单独判定见 server.ts。另外即使某个角色未显式配置查看字段权限系统也会自动追加主键与createdAt、updatedAt等必要字段见 server.ts。菜单访问权限菜单访问权限以菜单UI Schema 路由为维度控制界面访问入口。未被授权的菜单在导航中不显示用户也无法通过 URL 直接访问对应页面。权限配置界面通过DesktopAllRoutesProvider拉取桌面端全部路由见 ACLSettingsUI.tsx勾选即授权、取消即收回访问权。角色与菜单 schema 的绑定关系存储在rolesUischemas关联中见 roles.ts。插件配置权限插件配置权限用于控制特定插件参数的配置权限。当某个插件配置权限被勾选后管理中心将出现对应的插件管理界面。与允许配置插件的通用开关不同插件配置权限是按插件维度细分的例如可以允许某个角色配置邮件插件参数但不允许触碰工作流插件。权限在 UI 中的体现权限配置最终要落到界面表现上核心原则是单独配置的优先级高于全局配置数据表有单独配置时按单独配置执行没有则回退到全局配置。主要体现如下数据区块可见性由查看操作权限控制。全局没有查看权限时所有数据表区块都不显示某数据表单独配置查看权限后其区块恢复显示操作按钮显隐添加、编辑、删除、导出、导入操作按钮的显示分别由对应操作权限控制可通过数据范围如只能编辑自己的数据进一步约束字段显隐查看权限控制字段级可见性编辑/添加权限控制表单区块中可编辑/可填写的字段集合系统字段Id、CreatedAt、UpdatedAt 等即使不配置也默认拥有查看权限关系字段与关系区块关系字段作为组件时的权限由源表字段权限控制关系字段组件内部子表单/子表格字段权限由目标数据表权限决定而关系区块是否显示则由目标表权限控制与关系字段权限无关。以上细节在 权限在 UI 中的应用 中有完整的配置示例与 GIF 演示。角色并集多角色的权限合并策略当用户被分配多个角色时系统支持三种角色模式由管理员在系统设置中选择见 角色并集独立角色系统默认不使用角色并集用户需在个人中心逐个切换自己拥有的角色允许角色并集既允许同时使用所有角色的权限也允许用户逐个切换角色仅角色并集强制只能使用角色并集不能逐个切换。角色并集的合并规则为取所有角色的最大权限操作权限合并不同角色的能力直接叠加例如角色 A 允许配置界面、角色 B 允许安装插件合并后两个能力同时具备数据行合并多个角色的行条件取并集满足任一角色条件的记录即可访问Age 30与Age 25合并后覆盖全部记录数据列合并多个角色可见的字段相加角色 A 可见Name, Age、角色 B 可见Name, Sex合并后Name, Age, Sex均可见行列混合合并行与行、列与列分别合并而不是按行列整体组合合并。因此某些在不同角色下都不可见的行列交叉数据在合并角色下可能变为可见——这正是并集取最大权限语义的体现。这些规则在服务端通过roles:setSystemRoleMode等 action 与union-role.ts实现并有对应的测试用例 union-role.test.ts 验证合并行为。角色的默认与切换关于角色本身的运维细节请参阅 角色管理核心要点包括初始化安装后内置 Admin 与 Member 两个角色具有不同的默认权限设置角色标识name是系统唯一标识可自定义默认角色但系统内置角色root/admin/member不可删除默认角色指新建用户未配角色时自动绑定的角色一个用户可拥有多个角色在个人中心可切换进入系统的默认角色优先级为上一次切换的角色 第一个系统默认角色。从源码看新建用户时会自动查找default: true的角色并绑定见 server.ts用户角色变化时会清除对应角色的缓存条目见 server.ts保证权限变更即时生效。开发者扩展自定义权限配置栏ACL 插件为开发者提供了权限配置界面的扩展 API。通过PluginACLClient实例的settingsUI类型为ACLSettingsUI可以注册新的权限 Tab例如为移动端菜单增加独立权限页import { Plugin } from nocobase/client; import PluginACLClient from nocobase/plugin-acl/client; class PluginMobileClient extends Plugin { async load() { const aclInstance this.app.pm.get(PluginACLClient); aclInstance?.settingsUI.addPermissionsTab(({ t, TabLayout, activeKey }) ({ key: mobile-menu, label: t(Mobile menu, { ns: plugin-mobile }), children: ( TabLayout MenuPermissions / /TabLayout ), })); } }addPermissionsTab接收一个 Tab 对象或回调函数回调可拿到当前激活的 Tab 键activeKey、当前角色role、翻译函数t以及用于约束容器尺寸的TabLayout。从 ACLSettingsUI.tsx 的源码可以看到系统内置了 Systemsort: 10与 Desktop routessort: 20两个 Tab自定义 Tab 默认sort: 100数字越小排列越靠前可通过sort属性控制自定义 Tab 的展示顺序。完整的扩展示例与类型定义见 扩展权限配置栏。小结NocoBase 的权限体系设计遵循全局兜底 单独覆盖 字段细化的分层思路通用权限管系统能力全局操作权限定数据默认策略数据表权限做个别资源控制字段权限做最细粒度的列级管控菜单与插件权限管界面入口角色并集则解决多角色场景下的权限合并问题。配合内置 root/admin/member 三角色、all/own两大内置数据范围以及可扩展的权限 Tab 机制可以覆盖从简单业务系统到复杂多角色企业应用的绝大多数权限管理需求。若需深入源码建议从 server.ts服务端 ACL 同步与内置角色、roles.ts角色数据模型与 ACLSettingsUI.tsx权限界面扩展点三处入手。【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考