Files
zkxw/openspec/changes/zkxw-engineering-standards/specs/permission-conventions/spec.md
T

52 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: 角色与菜单授权
系统 SHALL 通过 `sys_role`、`sys_role_menu` 等模型维护角色与菜单的关联;角色管理界面 SHALL 支持为角色配置可访问菜单树,且勾选子菜单时 SHALL 自动包含必要父菜单(与《中科兴皖需求 V0.3》§2.1.5 描述一致)。
#### Scenario: 勾选子菜单
- **WHEN** 管理员在角色菜单配置弹窗中仅勾选叶子菜单
- **THEN** 保存后角色 SHALL 同时获得该叶子到根路径上的父菜单权限,避免出现「有子无父」的不可达状态
### Requirement: 数据权限范围
角色 SHALL 具有 `data_scope` 字段,取值语义为:全部、本部门、本部门及以下、仅本人、自定义等(与需求 §2.1.5 及表注释一致);当为自定义时,系统 SHALL 使用 `sys_role_data_scope_detail` 维护 `scope_type`(部门/用户)与 `scope_value`。
#### Scenario: 配置自定义数据权限
- **WHEN** 管理员将角色数据权限设为自定义并在弹窗中选择部门与用户
- **THEN** 持久化 SHALL 写入 `sys_role_data_scope_detail`,且运行时查询 SHALL 按明细过滤
### Requirement: 多角色权限合并
单个用户允许绑定多个角色;其**菜单权限**与**数据权限** SHALL 分别取所有的角色的权限**并集**(与需求 §2.1.5「特别注意」一致)。
#### Scenario: 两角色菜单合并
- **WHEN** 用户同时具有角色 R1(菜单集合 M1)与角色 R2(菜单集合 M2)
- **THEN** 用户可见菜单 SHALL 为 M1 ∪ M2
#### Scenario: 两角色数据范围合并
- **WHEN** 用户同时具有角色 R1 与 R2,各自数据权限范围不同
- **THEN** 可访问数据 SHALL 为两角色数据权限的并集(在实现上与产品确认:取更宽或按需求文档并集语义)
### Requirement: Web 与小程序菜单树
菜单管理 SHALL 同时支撑 Web 端与小程序端菜单;系统 SHALL 预置两棵顶层虚拟根(需求中的 parent_id=0 的「web 端菜单」「移动端菜单」),后续菜单 SHALL 挂载其下(与需求 §2.1.6)。
#### Scenario: 新增移动端菜单
- **WHEN** 管理员新增小程序端一级菜单
- **THEN** 该节点 SHALL 挂在移动端根节点之下,且 `visible`/`status` 字段符合规范枚举
### Requirement: 超级管理员与租户
租户管理 SHALL 仅对超级系统管理员开放(与需求 §2.1.1);其他系统管理 SHALL 在租户上下文中执行,与 `api-conventions` 中租户隔离一致。
#### Scenario: 非 superadmin 访问租户管理
- **WHEN** 非超级管理员请求租户管理接口或页面
- **THEN** 系统 SHALL 拒绝访问