safety-eval-service-frontend/.cursor/skills/specs/16-按钮权限控制规范/08-权限控制边界/SKILL.md

3.0 KiB

name description
jjb-button-permission-boundary 按钮权限控制边界。定义哪些按钮需要权限控制、哪些不需要。Use when 判断页面上的按钮是否需要接入 permission() 检查。

权限控制边界

判断原则

按需控制,不是所有按钮都要加权限。 只有会改变数据状态或涉及敏感操作的按钮才需要权限控制。

需要权限控制的按钮

类别 按钮示例 权限码示例
数据变更 新增、编辑、删除、批量删除、移动、复制 xx-xx-addxx-xx-editxx-xx-delete
数据导入/导出 导出、导入 xx-xx-exportxx-xx-import
状态流转 审核、审批、发布、下架、启用、禁用 xx-xx-approvexx-xx-publishxx-xx-enable
权限/分配 分配权限、授权、指派 xx-xx-assignxx-xx-authorize
只读查看 详情、查看 xx-xx-detailxx-xx-view
其他敏感操作 撤回、作废、确认、提交 xx-xx-withdrawxx-xx-confirmxx-xx-submit

不需要权限控制的按钮

类别 示例按钮 原因
搜索/过滤 查询、搜索 属于页面内数据筛选,不改变数据
表单重置 重置、清空表单 仅清零搜索条件,不影响数据
UI 交互 展开、收起、刷新 纯前端交互行为
选择/导航 取消选择、返回、关闭 不涉及数据变更

边界情况

  • 详情/查看:需要权限控制,部分业务场景下查看敏感数据也需受控。
  • 导出:一般需要权限控制,因为涉及数据批量导出,可能泄露数据。
  • 批量操作:批量新增、批量删除、批量审批等均需权限控制,每条操作对应独立权限码。

实际页面示例

以资源管理页面为例:

PageLayout
├── [需要] 新增视频 / 新增试题         ← reslib-app-resource-add
├── 搜索栏
│   ├── [不需要] 查询                  ← 搜索过滤
│   └── [不需要] 重置                  ← 表单重置
├── 表格
│   ├── [需要]   详情                  ← reslib-app-resource-detail
│   ├── [需要]   编辑                  ← reslib-app-resource-edit
│   └── [需要]   删除                  ← reslib-app-resource-delete
├── 批量操作栏
│   ├── [需要]   移动/复制              ← reslib-app-resource-move
│   ├── [需要]   批量删除               ← reslib-app-resource-batch-delete
│   └── [不需要] 取消选择               ← 选择交互

注意事项

  • 宁缺毋滥:不确定是否需要控制的按钮,默认不加权限
  • 权限码:格式为 appId-页面-操作语义,前端 permission(xxx) 与平台注册 perms 一致,注册流程见 jjb-button-permission-registration
  • 与后端一致:权限码必须在平台注册后,后端接口返回的数据中才会包含该权限码