Skip to content

权限资源 ★ ​

一句话:权限资源 = 平台权限体系的「资源目录」——把菜单、按钮(操作)、流程、流程分类、在线表单数据集、列、字段统一登记成一棵可授权的树。每条资源带三样东西:权限标识(system:user:query 这样的串)、类型、默认效果(没有任何授权命中时的兜底判定)。授权动作在角色资源授权里做,本页负责「资源本身」以及它的明细:授权反查、槽位映射、记录分享、字段权限、子资源下钻。

先记住这一条:默认效果决定「什么都没配时」的结果

判定引擎沿资源链找命中授权;一行都没命中时,回落到最具体那条资源的 default_effect 列。所以「用户打不开某页」不一定是谁配了拒绝,很可能只是那条资源默认就是「拒绝」而没人给它授权。这条列的取值就是本页最该看懂的一列。

功能在哪 ​

  • 菜单路径:系统管理 → 组织权限 → 权限管理 → 权限资源
  • 地址栏路由:/system/org-permission/perm/resource
  • 打开本页要 system:resource:query;新增/编辑/删除按钮要 system:resource:update

权限资源列表:搜索 system:user 后的展开态(租户管理员视角)

界面认识 ​

区域作用常用操作
查询区权限标识(模糊,如 system:user)/ 资源名称 / 类型(7 选 1)「搜索」「重置」「新增」「批量删除(N)」
统计条「共 N 个资源」;搜索时多一句橙字「搜索结果已展开全部层级」勾选框「包含列 / 字段级资源」
资源树表资源名称 / 权限标识 / 类型 / 默认效果 / 排序 / 操作点行首箭头展开子资源;行内「明细设计」「编辑」「删除」

统计条右侧那句常驻提示就是本页的用法总纲:点击行展开子资源,点「明细设计」配置授权、槽位与字段权限。

两种展示模式(很多人卡在这) ​

模式什么时候是这个样子表现
懒加载树(默认)三个查询条件全空只列根节点,点行首箭头才去拉它的子资源;首屏快
搜索结果树填了权限标识 / 资源名称 / 类型任一个全量拉取,命中节点连同它的祖先一起展开成树(橙字「搜索结果已展开全部层级」)

「重置」会回到懒加载树。命中的节点保留祖先,是为了让你看清「这个权限串挂在哪一层下面」——继承就是沿这条祖先链发生的。

「包含列 / 字段级资源」这个勾选框

默认是勾上的。取消勾选后,列表里不再出现「列 / 字段」这两类资源,数据集节点展开时清爽很多;需要看某个数据集的字段级资源时,走它的「明细设计 → 字段权限」页签同样能看到(面板里的子资源始终包含字段级)。

表格没有分页 ​

资源是一棵树,分页会把父子拆散,所以本页不分页:表格高度按视口算,内容多时表体内部滚动、表头钉住。

列含义 ​

列含义读法
资源名称给人看的名字后面挂灰色「菜单派生」标签的,表示这条资源由菜单管理的菜单自动生成
权限标识判定时用的串目录层可能为空,明细面板里显示成「(目录)」
类型这条资源是什么东西见下表
默认效果无授权命中时的兜底允许(绿)/ 拒绝(灰)
排序同级显示顺序数字小的在前
操作明细设计 / 编辑 / 删除「明细设计」不受 system:resource:update 限制,能打开本页就能打开它

类型词表 ​

类型出厂默认效果说明
菜单 MENU拒绝导航层(目录/菜单),通常不直接授权,靠它下面的「操作」控制
操作 ACTION拒绝一个权限串,如 system:user:query;接口鉴权、按钮显隐都看它
流程 PROCESS拒绝BPM 流程定义;发起/设计/管理/查看全部四类动作落在这
分类 CATEGORY拒绝流程分类,是流程的父资源——给分类授权,其下流程沿祖先链继承
数据集 DATASET允许在线表单的整张表。它不是访问控制点(能不能进表单由它下面的 ACTION 承担),只是列/字段的挂载点、行过滤规则与槽位的锚
列 COLUMN允许列表里的一列
字段 FIELD允许详情/表单里的一个字段

为什么「拒绝」显示成灰色而不是红色

菜单/操作/流程/分类这四类的出厂默认就是拒绝,一屏几十行几乎全是它,全染红等于把红色用废。灰色 = 出厂默认拒绝;红色只出现在角色资源授权里有人显式配的那条 DENY。两种颜色各携带一种信息。

判定读的是库里的列,不是这张表的「出厂值」

上表的默认效果是新建资源时的填充值。真正参与判定的是 sys_resource.default_effect 这一列,它可能被人改过。所以看到某条流程资源的默认效果是「允许」,不要当成 bug——以列表里显示的实际值为准。

常用操作 ​

找一个资源 ​

三条路,按你手上的线索选:

你手上有什么怎么找
权限串(如 system:user:query)「权限标识」填进去搜——支持模糊,填 system:user 能把这一族全列出来
中文名(如「用户查询」)「资源名称」搜
只知道大概类型「类型」选「数据集」等,配合名称搜

搜到后点行内「明细设计」进入配置面板。

明细设计:五个页签按需出现 ​

面板标题是「明细设计 — <资源名>」,顶部固定显示资源名称 / 权限标识 / 类型 / 默认效果。页签是按资源类型出现的:某个功能在当前资源上压根不生效时,整个页签不渲染(留一个空页签比没有更坏,会让人以为没加载出来)。

页签出现条件干什么
授权列表常驻(任何类型都有授权)反查「这个资源上都给了谁什么」,可行内新增/编辑/删除授权
槽位映射类型 = 数据集把规则模板里的槽位(owner / dept / status…)绑到「所属表 + 真实列名」
记录分享类型 = 数据集设「谁可以把一条记录分享给别人」
字段权限有列/字段级子资源列出字段级子资源,逐个「配置授权」
子资源有非字段级子资源下钻到子资源的明细设计

授权列表(反查引用面) ​

这是从资源侧看授权的入口——角色资源授权是从角色侧看,两边看的是同一批数据。列包括:授权主体(角色)、动作、效果、行过滤规则(仅数据集才有这一列)、字段模式(仅列/字段才有)、到期、操作。

  • 「新增授权」「编辑」都是行内编辑,不弹第二层窗——授权行需要与相邻行对照着看(同一角色在这个资源上已经配了哪些动作),弹窗会正好挡住上下文;
  • 主体那一格只有角色下拉,所以只有角色行给「编辑」;库里存量的用户/所有登录用户等主体行照常显示、照常能删,要改请到角色侧的资源授权页;
  • 「新增授权」是 upsert:同主体 + 同资源 + 同动作已存在时会覆盖那一行,所以「新增完发现行数没变」不是没存上;
  • 选了预留动作(新增/修改/删除/导出/导入/打印/被引用查询)时,表格上方会出现一条常驻黄色警告:能存进库、也能正常保存,但后端鉴权时没有任何一处会拿它做判定。

明细设计面板:授权列表 / 槽位映射 / 记录分享 / 字段权限 / 子资源(租户管理员视角)

改一条规则前,先来这里反查引用面

一条权限规则可能被多个角色的多条授权行引用,改参数 = 同时改这些人的可见行范围。在目标数据集的「明细设计 → 授权列表」里,「行过滤规则」列显示的就是每条授权行挂的规则名,扫一眼就知道会波及谁。

槽位映射(数据集专属) ​

行过滤规则里写的是槽位名(owner、dept…),槽位映射负责把名字翻译成物理列。三列的口径刻意不同:

列能不能手输为什么
槽位名称可选可输下拉是后端给的槽位全集,但规则模板允许引用枚举之外的自定义槽位,锁成白名单会让那类规则永远配不出来。已配过的槽位在列表里灰掉并标「(已配)」
所属表只能选列表查询常带 JOIN,同一个列名(如 create_user_id)在主表和关联表上都可能有,不记表名就表达不出「对应关联表上的那一列」。主表会标「(主表)」,选别的表给橙色提示「非主表:只有列表查询真的 JOIN 了它,这条映射才生效」
真实列名只能选这一列会被原样拼进行过滤的 WHERE,而它的正确性机器能核实。手打省下几秒,换来的是一条静默失效的权限规则:条件求不出来 ⟹ 整条授权按「求不出来」处理 ⟹ 一行都看不到且不报错
  • 新增槽位时「所属表」默认选中主表(owner/dept/status 这些绝大多数就在主表上);
  • 挑好槽位与表后,系统会拿该槽位的候选列名和这张表的真实列对一次,对上了自动填进「真实列名」,对不上留空让你自己挑;
  • 编辑既有行时槽位名不可改(规则是按名字引用它的,改名等于让所有引用它的规则瞬间求值恒假,且不会有任何报错);要换名字请删掉重建;
  • 存量脏数据在「真实列名」后面标红「失效」,鼠标悬停能看到具体是哪张表上没有哪一列。

删槽位前先确认无规则引用

删掉槽位后,引用该槽位的规则会求值恒假(一行都看不到且不报错)。删除确认框里就写着这句话。

记录分享(数据集专属) ​

分享策略决定「谁可以把一条记录分享给别人」:

取值含义
OWNER_ONLY(默认)仅记录归属人可分享。依赖 owner 槽位映射——没配槽位时读不到归属人,分享会一律被拒
ANY_VIEWER看得见这条记录的人都能分享
DISABLED完全禁止分享

「取消共享」不等于「禁止查看」

取消共享只是删掉那条共享记录;对方若通过创建人、本部门、角色授权等别的途径本来就看得见,取消后照样看得见。要真正挡住,需要在「授权列表」里加一条 DENY。

字段权限 ​

列出该资源下的列 / 字段级子资源(字段名 + 权限串 + 类型 + 默认效果),点「配置授权」会用同一个面板打开那个字段的明细,在它的授权列表里给「字段模式」列选值:

字段模式效果
可编辑 EDITABLE正常显示、可改
只读 READONLY显示但不可改
隐藏 HIDDEN不显示

只有这三个值是合法的

后端只认 EDITABLE / READONLY / HIDDEN。解析不出来的值会让整行授权被忽略,字段回落到默认可编辑——保存成功、列表正常、不报错,只是字段权限压根没生效。

新增 / 编辑资源 ​

点「新增」,或行内「编辑」。表单字段见字段说明。

菜单派生的资源只能改两样

资源名称后面挂「菜单派生」标签的,表单里权限标识 / 资源名称 / 资源类型 / 父资源都是灰的,只能改「显示顺序」与「状态」,顶部还有一条黄色提示:该资源由菜单自动维护,改了权限标识/名称会在下次菜单同步时被覆盖回去。要改请到菜单管理改对应菜单。

「父资源」下拉会排除列/字段级资源(它们是叶子,不该有子节点);要挂在最外层就选「根节点」。

删除 / 批量删除 ​

行内「删除」会问「确认删除资源「<名称>」?」。勾选多行后点「批量删除(N)」,确认文案把规则说得很直白:

确认删除勾选的 N 个资源?其中只要有菜单派生、被授权引用、或有子资源没一起勾选的,后端会整批拒绝

全有或全无:混进一个不该删的,整批都不删。

字段说明 ​

资源表单 ​

字段必填取值 / 校验说明
权限标识是如 system:user:query;全局唯一判定与诊断都按这个串找资源。重复时报:权限标识【…】已存在(资源 id=…)。同一权限串存在多行资源会导致授权判定不确定
资源名称是文本给人看的名字
资源类型是菜单 / 操作 / 流程 / 分类 / 数据集 / 列 / 字段决定明细面板出现哪些页签、动作下拉开放哪些动作。非法值报:资源类型不合法:…
父资源是「根节点」或任一非字段级资源继承沿这条父子链发生;挂错父级 = 继承错授权
显示顺序是≥0 的整数同级排序
状态是开启 / 关闭关闭的资源不出现在授权与诊断的下拉里

明细面板里的字段 ​

字段出现在取值说明
授权主体(角色)授权列表角色下拉,可按编码/名称/编号搜显示格式 编码(名称),第二行是 类型 · #编号,出问题可直接拿去对库
动作授权列表生效动作 / 预留动作两组完整词表见角色资源授权 · 字段说明
效果授权列表允许 ALLOW / 拒绝 DENYDENY 优先级高于所有 ALLOW
行过滤规则授权列表(仅数据集)启用中的规则;可清空=不限制行绑在非数据集资源上是死字段,所以那一列干脆不显示
字段模式授权列表(仅列/字段)可编辑 / 只读 / 隐藏同上,只对字段级资源有意义
到期授权列表日期时间;留空=永不过期已过期的行标红「已过期」,且不参与判定
槽位名称槽位映射下拉全集或自定义输入同一资源下重名报:该资源下 slot=… 的映射已存在,请直接修改那一行
所属表槽位映射只能从库里真实存在的表选不在库里报:表 … 不在当前库里,无法绑定槽位映射
真实列名槽位映射只能从该表的真实列选不存在报:表 … 上没有列 …,请重新选择
说明槽位映射文本如「记录创建者用户 id」
分享策略记录分享OWNER_ONLY / ANY_VIEWER / DISABLED非法值报:非法的分享策略:…,可选值 OWNER_ONLY / ANY_VIEWER / DISABLED

视角对照 ​

视角看到什么
超管 / 租户管理员全部资源树,能新增/编辑/删除,明细面板里所有页签可写(本页截图即租户管理员视角)
只有 system:resource:query 的角色能看树、能开「明细设计」查看授权与槽位,但「新增/编辑/删除」不出现;面板里的「新增授权」等按钮也按 system:grant:*、system:slot-mapping:* 各自收口
普通员工无入口,直达 403

进阶 ​

  • 角色资源授权:从角色侧配授权(含批量授权与智能查看权限地图);
  • 权限规则:行过滤规则的定义处,被授权行的「行过滤规则」列引用;
  • 权限诊断:某个人对某个权限串到底放不放行,以及为什么;
  • 菜单管理:菜单派生资源的源头。

常见问题 ​

Q:搜一个明明存在的权限串,一条都不显示? A:先看有没有勾「包含列 / 字段级资源」——搜的是列/字段级资源却没勾,就会被过滤掉。另外搜索态是「命中节点连同祖先一起展开」,结果里会多出几行父级,别当成噪音。

Q:删资源时报「该资源上还有 N 条授权」? A:该资源上还有 N 条授权,删除会产生孤儿授权。请先在角色的「资源授权」里解除。先去角色资源授权删掉那些授权行,或直接在明细面板的「授权列表」里逐条删。

Q:删资源时报「还有 N 个子资源没有一起选中」? A:批量删除要求父子一起勾。要么把子资源一并勾选,要么先删子资源。

Q:菜单派生的资源删不掉? A:该资源由菜单(id=…)自动维护,删了会在下次菜单同步时重建。要移除请到「菜单管理」删除对应菜单。这是设计如此:资源跟着菜单走,两边不会打架。

Q:配了字段权限(隐藏某列),前端却还是看得见? A:三件事按顺序查——① 字段模式是不是写成了 EDITABLE/READONLY/HIDDEN 之外的值(非法值整行被忽略);② 授权行动作是不是预留动作(不参与鉴权);③ 用权限诊断看这条授权有没有「参与决策」。

Q:行过滤规则挂上了,用户却一行都看不到? A:几乎都是槽位映射的问题:没配、配在了非主表而列表查询没 JOIN 它、或「真实列名」标着红色「失效」。规则求不出来时按 fail-closed 处理(一行都看不到且不报错),到该数据集的「明细设计 → 槽位映射」核对。

Q:为什么有的资源没有「行过滤规则」这一列? A:那一列只对数据集出现。ruleId 绑在别的类型上是死字段(判定引擎从不读它,行过滤也不沿资源树上溯),显示出来等于页面在教人配一个不生效的东西。