# 模块 1:RBAC 权限模型设计
工单模块不是普通 CRUD。复杂度不在字段多少,而在谁能看、谁能改、什么条件下能改,以及出问题后能否追溯。
管理员
负责人
研发
测试
只读用户
--- # 先矩阵,后代码
错误顺序
1. 先生成页面和接口 2. 再临时隐藏按钮 3. 最后补权限说明
推荐顺序
1. 先定义角色和动作 2. 再生成权限矩阵 3. 最后落到菜单、按钮、接口、数据范围
权限矩阵是后续代码生成、Review 和验收的依据,不是交付后的补充说明。
--- # RBAC 权限矩阵
| 功能 | 管理员 | 负责人 | 研发 | 测试 | 只读 | |---|---|---|---|---|---| | 查看列表 | Y | 条件允许 | 条件允许 | 条件允许 | 条件允许 | | 查看详情 | Y | 条件允许 | 条件允许 | 条件允许 | 条件允许 | | 新增工单 | Y | Y | Y | Y | N | | 编辑工单 | Y | 条件允许 | 条件允许 | 条件允许 | N | | 删除工单 | Y | N | N | N | N | | 指派工单 | Y | 条件允许 | N | N | N | | 提交验证 | Y | 条件允许 | Y | N | N | | 关闭工单 | Y | 条件允许 | N | Y | N | | 查看审计 | Y | 条件允许 | 条件允许 | 条件允许 | N | | 查看看板 | Y | Y | 条件允许 | 条件允许 | 条件允许 |
--- # 条件允许要展开
| 条件类型 | 示例 | 验收方式 | |---|---|---| | 数据范围 | 只能看本人、本人团队、本人负责的工单 | 不同账号列表数量不同 | | 状态限制 | 只有待验证才能关闭 | 非目标状态接口返回拒绝 | | 角色叠加 | 负责人兼管理员时按更高权限 | 用双角色账号验证 | | 字段限制 | 研发只能改处理说明,不能改优先级 | 提交非法字段被拒绝 | | 时间限制 | 已关闭工单超过窗口不能重开 | 超时重开失败 |
--- # 权限矩阵 Prompt
```md 请基于 JeecgBoot 工单模块设计 RBAC 权限矩阵。 角色: 管理员、负责人、研发、测试、只读用户。 功能点: 查看列表、查看详情、新增、编辑、删除、指派、 提交验证、关闭、驳回、查看审计记录、查看看板。 要求: 1. 区分允许、拒绝、条件允许。 2. 条件允许必须展开为数据、状态、字段或时间条件。 3. 每个敏感操作给出后端接口验收方式。 4. 标注哪些权限属于业务待确认。 5. 不要直接生成代码。 ```
--- # AI 容易漏掉的权限风险
| 风险 | 表现 | Review 问法 | |---|---|---| | 前端按钮替代权限 | 按钮隐藏,但接口可直接调 | 无权限账号直接请求会怎样 | | 数据范围缺失 | 所有人看到同一批工单 | 普通用户能否看到他人数据 | | 条件允许泛化 | “条件允许”被实现成允许 | 条件在哪里校验 | | 审计权限遗漏 | 审计日志对不该看的人开放 | 谁能看 old/new value | | 删除权限过宽 | 负责人或研发能删除工单 | 删除是否只限管理员 |
--- # 可直接复制到 rules:权限安全
```md ## 敏感操作必须四层校验 - 级别:硬约束 - 适用场景:新增、编辑、删除、指派、状态流转、查看审计、查看看板。 - 必须:同时覆盖页面/菜单权限、按钮权限、后端接口权限、数据范围权限。 - 禁止:只做页面或按钮控制。 - 验收方式:授权角色能完成;未授权角色前端不可见且直接请求接口失败;越权数据访问失败。 ## 权限字符必须有来源或标记为建议 - 必须:来自现有菜单、权限配置、前端权限指令、后端鉴权注解或团队规范。 - 禁止:凭空编造权限字符并当成事实。 - 验收方式:权限字符在前端、菜单配置、后端接口之间一致。 ## 数据权限不得被查询条件替代 - 必须:后端统一校验当前用户可访问的数据范围。 - 禁止:只依赖前端传入 userId、deptId、tenantId 或筛选条件。 ```