角色资源授权 ★
一句话:本页回答「这个角色到底能干什么」——给角色逐条配置「对哪个资源、做什么动作、允许还是拒绝、能看到哪些行、哪些字段」。它是本项目定制权限体系(资源 → 授权 → 规则)的操作中枢。
★ 定制功能
上游开源版只有「菜单权限 + 数据范围」两件套;本项目把它重做为资源树 + 动作词表 + 行过滤规则 + 字段模式四层模型。本页及其配套的权限规则、权限资源、权限诊断在上游文档里查不到,以本篇为准。
功能在哪
- 入口:系统管理 → 组织权限 → 角色管理 → 行内「资源授权」(见角色管理)
- 地址栏路由:
/system/role/grant?roleId=<角色编号>(隐藏路由,不在菜单里) - 不带
roleId直达会看到空态提示:「缺少角色参数,请从角色管理页的『资源授权』进入」

界面认识
| 区域 | 作用 | 常用操作 |
|---|---|---|
| 角色头条 | 返回按钮 + 角色名 + 角色编码 | 确认自己没授错角色 |
| 查询区 | 权限标识 / 动作 / 效果 / 资源名称 / 到期时间 五个服务端筛选 | 「搜索」「重置」;权限标识框回车即搜 |
| 工具条 | 「切换智能查看」「新增授权」「批量授权」「批量删除(N)」 | 前三个两种视图都在;批量删除仅列表视图 |
| 授权列表 | 一授权一行 | 行内「编辑」「删除」 |
列表各列含义:
| 列 | 含义 |
|---|---|
| 资源名称 / 权限标识 | 授到了哪个资源;标识形如 system:user:query |
| 动作 | 查看 / 新增 / 修改 / 删除 / 导出 / 导入 / … 或 * 全部动作 |
| 效果 | 允许(绿)/ 拒绝(红)。拒绝是显式否决,优先级最高 |
| 行过滤规则 | 三态:挂了规则名 = 只看规则放行的行;不受限(全部行) = 数据集但没挂规则;- = 菜单/按钮类资源,没有「行」的概念 |
| 字段模式 | 可编辑 / 只读 / 隐藏;只对「列/字段」类资源有意义,其余显示 - |
| 到期时间 | 永不过期 或具体时刻;过期后状态列变「已过期」,授权自动失效 |
| 状态 | 生效中 / 已过期 |
两种视图:编辑列表 与 智能查看
工具条「切换智能查看」把列表换成一张只读的权限地图(再点「切换编辑列表」换回)。两者解决不同问题:
- 编辑列表:管「配了什么」——增删改授权行;
- 智能查看:管「实际生效什么」——把角色级授权沿资源树剪枝合并成一棵树,一眼看出「哪片子树整片没权限」。

地图顶部那句汇总是读图钥匙,例如「共 46 个资源、81 项生效动作:其中 4 项继承自上级、12 项来自全员默认;另有 23 个资源属『默认放行(未配置)』已收起,均未计入」——它把藏起来的东西明说出来,避免把「树上剩 46 行」误读成「角色只有 46 项权限」。
地图工具条:
| 控件 | 作用 |
|---|---|
| 筛选框 | 客户端剪枝:按资源名称或权限标识过滤,右侧同时报「命中 N 个(全量 M 个)」 |
| 显示默认放行(未配置) | 把「没配但默认允许」的资源也画进来 |
| 显示字段级资源(列 / 字段) | 把列/字段级节点画进来 |
| 展开全部 / 收起全部 | 整棵树展开态切换 |
| 刷新 | 重新求值 |
地图各列:资源名称(树)/ 权限标识 / 生效动作(标签串,+3 表示还有三个,悬浮看全)/ 权限来源(本资源已配置 = 角色自己的授权;全员默认拥有 = 平台默认放行;路径节点 = 只是祖先路径)/ 行过滤规则 / 字段模式 / 到期时间 / 状态。
智能查看的口径比「用户实际能做的」窄
它只按角色维度求值:本角色 + 它继承的上级角色 + 全员主体;不含用户级 / 岗位 / 部门 / 用户组授权。所以「地图上没有」不等于「用户做不到」;要查某个具体用户的最终结论,用权限诊断。
常用操作
新增一条授权
- 点「新增授权」,右侧滑出授权抽屉;
- 在左侧资源树里点选目标资源(搜索框可按名称/标识找;勾「显示字段级资源」才能选到列/字段);
- 选「动作」——可选项随资源类型变化(流程/分类才开放 发起/设计/管理/查看全部);
- 选「效果」允许或拒绝;
- 资源是数据集时才能选「行过滤规则」(见权限规则);资源是列/字段时才能选「字段显示模式」;
- 可选「到期时间」,点「确定」。

结果:列表多出一行,状态「生效中」。同「主体+资源+动作」已存在时是覆盖更新,不会产生重复行。
抽屉是「非模态穿透」的:背后的列表不变暗、还能点
这是刻意设计——一边配授权、一边回头查「这个权限标识已经授过什么」。因此抽屉开着时,「新增授权/批量授权/编辑/删除/批量删除」会被禁用(防止静默替换你填了一半的内容),而搜索、翻页、勾选、切换视图保持可用。
抽屉不会因 Esc 关闭,也不是 bug
穿透模式下操作者的手在背后列表上核对,随手按 Esc 会毁掉填了一半的表单。关闭入口只有两个:右上角 × 与底部「取消」。左缘还有拖拽柄可调整抽屉宽度。
批量授权
- 点「批量授权」,滑出批量抽屉;
- 在资源树里多选目标资源(节点上有「全选下级(N)/取消下级(N)」);
- 选「动作」(可多选,一次开「查看+新增+修改+删除」);
- 选「效果」,可选「行过滤规则」「到期时间」(对整批生效);
- 点「确定」。

结果:提示 授权完成:新增 N 条、覆盖 M 条。
撞上既有授权时会先问「保留还是覆盖」
同「主体+资源+动作」已有行时弹三态确认:保留既有配置(本次没填的字段沿用旧值)/ 按本次填写覆盖(把旧的规则/字段模式一并清空)/ 放弃提交。整批操作前先看一眼这个弹窗报的条数。
覆盖度是建议,不是拦截
数据集绑行过滤规则时,若当前账号查不到槽位映射,会给一条黄色提醒「无法核对槽位覆盖度…缺槽位的数据集绑上规则后会一行都查不出来」。提交按钮不会因此禁用——平台认为操作者可能比前端更清楚那张表的实际情况。
编辑 / 删除授权
- 编辑:行内「编辑」,抽屉回填,改完「确定」(同槽位覆盖更新);
- 删除:行内「删除」确认;或勾选多行后「批量删除(N)」。
删除立即生效于下次鉴权
被删授权对应的能力,用户下次登录即失去。删前用智能查看确认这片子树是否还有别的来源兜底。
用智能查看找缺口
- 切到智能查看;
- 展开关心的子树,看「权限来源」列:
路径节点= 这条只是路过的祖先,本身没配权限; - 发现整片缺权限 → 不用切回列表,直接点「新增授权/批量授权」就地补(抽屉穿透,树还看得见);
- 补完点「刷新」复核。
字段说明
「动作」词表(★ 定制,全站统一):
| 动作 | 含义 | 开放范围 |
|---|---|---|
* 全部动作 | 通配该资源所有动作 | 全部资源 |
| 查看 VIEW | 读:进页面、查列表、看详情 | 全部资源 |
| 新增 CREATE / 修改 UPDATE / 删除 DELETE | 写三件套 | 全部资源 |
| 导出 EXPORT / 导入 IMPORT / 打印 PRINT | 批量进出与打印 | 全部资源 |
| 发起 START / 设计 DESIGN / 管理 MANAGE / 查看全部 VIEW_ALL | 流程专属 | 仅 流程 / 分类 资源 |
| 被引用查询 REFERENCE | 被别的模块引用时的查询权 | 全部资源 |
「预留动作」配了也不生效——但有一个例外口径
CREATE/UPDATE/DELETE/EXPORT/IMPORT/PRINT/REFERENCE 在未折叠的资源族里是预留位:配上去界面照存,但鉴权不读它们(选到这类动作时抽屉里会给一句常驻警告,别以为是配错了)。例外是在线表单这类按「权限标识带操作词」折叠的资源族:...:create、...:delete 等本身就是独立资源,鉴权查的是「这些资源 + 动作=查看」,所以在那一族里它们是生效的。新发布的在线表单更彻底:七个动词不再各自成行,而是收在数据集行的授权「动作」列里(权限资源里只有一个数据集节点),此时配 CREATE 就是配「数据集行 + 动作=新增」,同样生效;但它的菜单可见性要另授同名的「菜单」行,见从零搭建一个应用第 5 步。判断某资源族走哪条口径,看权限资源里它是「一个数据集 + 若干操作子资源」还是「一列平铺的按钮资源」。
| 字段 | 必填 | 说明 |
|---|---|---|
| 资源 | 是 | 资源树单选;换资源后动作/规则会被重置为合法值 |
| 动作 | 是 | 见上表 |
| 效果 | 是 | 允许 / 拒绝;拒绝优先于任何允许 |
| 行过滤规则 | 否 | 仅数据集类资源可选;见权限规则 |
| 字段显示模式 | 否 | 仅列/字段类资源可选:可编辑 / 只读 / 隐藏 |
| 到期时间 | 否 | 不填 = 永不过期 |
视角对照
| 视角 | 看到什么 |
|---|---|
超管 admin / 租户管理员 docadmin | 完整授权页,可增删改 |
只有 system:grant:query 的角色 | 能看列表与地图,但「新增/批量/编辑/删除」按钮不出现 |
普通员工 salesman01 | 无入口;直达路由 403 |
授权效果的对照在业务页上看
给 docsales 的角色挂了行过滤规则后,它登录在线表单「校验示例4-唯一性长度与脱敏」时行数从 8 变 2、联系邮箱整列消失、联系手机置灰——「配了什么」与「看到什么」的逐步对照,见场景教程配置行级数据权限。
进阶
- 权限规则:行过滤规则的定义处(模板 + 参数);
- 权限资源:资源树与默认效果的维护处,「明细设计」可反向看某资源授给了哪些角色;
- 权限诊断:排查「某人为什么有/没有这个权限」;
- 角色管理:角色壳子与成员;租户套餐:角色能授的菜单不超过套餐白名单。
常见问题
Q:直达 /system/role/grant 只看到一句提示? A:缺 roleId 参数。从角色管理行内「资源授权」进入,它会带上角色编号。
Q:智能查看里某菜单「不在树上」,但用户实际能点? A:地图只算角色级授权。用户级/岗位/部门/用户组授权、以及「默认放行(未配置)」的资源默认收起——勾上「显示默认放行」再看,或用权限诊断查最终结论。
Q:批量授权弹窗问「保留既有配置 / 按本次填写覆盖 / 放弃提交」,选哪个? A:想只改本次填了的字段、旧值不动 → 保留;想把整批统一到本次填写(旧规则/字段模式会被清空)→ 覆盖;发现选错资源 → 放弃。
Q:为什么「行过滤规则」下拉是灰的? A:所选资源不是数据集类。行过滤按物理表反查 DATASET 资源,菜单/按钮上没有「行」的概念。
Q:授权配了 CREATE,用户还是不能新增? A:CREATE 目前是预留动作,鉴权链路只读 VIEW 等生效动作与菜单/按钮权限。按钮显隐走菜单授权,见本页动作词表的 info 框。
