数据权限
# 数据权限
数据范围挂在「角色 + 具体权限」上,不是给整个用户一个全局范围。一个用户有多个角色时,同一权限的范围取并集。
| 范围 | 可见数据 |
|---|---|
| SELF | 本人 |
| DEPT | 请求当时有效的本部门,不含下级;没有部门则为空 |
| DEPT_AND_CHILDREN | 请求当时有效本部门及全部下级;没有部门则为空,部门移动后重新计算 |
| CUSTOM_DEPTS | 角色显式选中的有效本租户部门;不隐含本人或下级,空选择范围为空 |
| ALL | 当前租户内该权限允许的数据,不含其他租户 |
只拥有 SELF 读取的角色,不能和另一个只有 ALL 写入的角色拼成 ALL 读取。范围外的 ID 按不存在处理,返回 404001,避免泄露记录是否存在。
用户列表、计数、详情、写入和关联查询使用同一套租户与数据范围条件。修改部门时同时检查旧记录和新部门。SELF 用户不能通过给自己换部门来扩大 DEPT 范围。
操作日志和登录日志各自计算范围:SELF 只看本人事件,DEPT 按主体当前有效部门,ALL 仍限于本租户。两个日志权限不能互相拼成更大范围。
平台身份没有租户业务数据通道。跨租户 ID 不能通过请求字段指定。
在「角色管理 → 授权」选择范围。自选部门可选择多个节点,最多 1000 个;只有租户管理员在输入本人当前密码并通过版本检查后才能保存。完整树仍限制为 10000 节点、64 层。部门被角色引用时须先解除选择再删除;重建同名部门不会继承旧授权。
客户端提交 CUSTOM_DEPTS 必须明确给出 departmentIds 数组:[] 表示清空,漏传或 null 拒绝为 400002。其他范围的数组必须为空,旧客户端可省略。跨租户、已删除或不存在的部门统一返回 404001,整批授权保持原状;旧版本返回 409001,应重新读取表单后再提交。
用户创建必须位于该创建权限允许的部门集合;修改先验证旧记录,再校验目标部门。历史日志按主体当前有效部门计算范围;角色授予的操作日志范围不能扩大另一个角色的登录日志权限。授权关系、版本和审计同事务提交,部门移动后开始的新请求使用新树。
此扩展已接入用户及审计模块;其他业务资源必须各自声明归属规则并接入校验,不会因新增范围枚举自动获得支持。实施证据见 M5 实施记录。
保存角色数据范围时,CUSTOM_DEPTS 必须带 departmentIds(空数组表示清空):
{
"dataScope": "CUSTOM_DEPTS",
"departmentIds": ["10", "11"],
"version": 2,
"operatorPassword": "<操作者提供>"
}
漏传 departmentIds 或对其他范围传入非空数组时返回 400002。