权限码清单
权限码格式 模块:资源:动作,来自 sys_menus.permission。后端 middleware.Require、前端 can()、菜单按钮节点三处必须一致。
多 API 面:system:* 等后台权限码只用于 admin 面。client / merchant 等自定义面有自己的身份体系,不应复用后台权限码;接入方式见 多 API 模式。
下表的菜单 ID 来自种子数据 migrations/000001_init.up.sql。以数据库实际数据为准;新增模块时不要复用这些 ID。
1. 解析规则
用户 → 启用角色 → 角色授权菜单(status=1)→ sys_menus.permission
super_admin 跳过权限集合,所有 Require 直接放行。
- 目录节点通常没有权限码,只用于分组;按钮节点必须填权限码。
- 菜单节点(type=2)可以带权限码(如
system:user:list),进入页面需要它。
- 权限集合在每次请求时重新加载,改角色/菜单无需重启。
2. 工作台与账号
| 权限码 |
菜单 |
ID |
说明 |
dashboard:view |
总览 |
1 |
看板聚合接口 |
| —(登录即可) |
个人中心 |
3 |
个人资料、密码、会话、TOTP、Passkey |
| —(登录即可) |
站内通知 |
— |
/notifications* |
3. 用户
| 权限码 |
菜单 |
ID |
对应接口 |
system:user:list |
用户管理 |
10 |
GET /users、GET /users/:id |
system:user:create |
新建用户 |
20 |
POST /users |
system:user:update |
编辑用户 |
21 |
PUT /users/:id、状态、角色分配 |
system:user:delete |
删除用户 |
22 |
DELETE /users |
system:user:reset |
重置密码 |
23 |
PUT /users/:id/password |
system:user:import |
导入用户 |
24 |
POST /users/import、GET /users/template |
system:user:export |
导出用户 |
25 |
用户页「导出」按钮的显示权限;实际提交任务还要求 system:export:submit |
4. 角色
| 权限码 |
菜单 |
ID |
对应接口 |
system:role:list |
角色管理 |
11 |
GET /roles、/roles/all、/roles/:id/menus |
system:role:create |
新建角色 |
30 |
POST /roles |
system:role:update |
编辑角色 |
31 |
PUT /roles/:id |
system:role:delete |
删除角色 |
32 |
DELETE /roles/:id |
system:role:assign |
分配权限 |
33 |
PUT /roles/:id/menus |
5. 菜单
| 权限码 |
菜单 |
ID |
对应接口 |
system:menu:list |
菜单管理 |
12 |
GET /menus/tree |
system:menu:create |
新建菜单 |
40 |
POST /menus |
system:menu:update |
编辑菜单 |
41 |
PUT /menus/:id |
system:menu:delete |
删除菜单 |
42 |
DELETE /menus/:id |
6. 部门
| 权限码 |
菜单 |
ID |
对应接口 |
system:dept:list |
部门管理 |
13 |
GET /departments/tree |
system:dept:create |
新建部门 |
50 |
POST /departments |
system:dept:update |
编辑部门 |
51 |
PUT /departments/:id |
system:dept:delete |
删除部门 |
52 |
DELETE /departments/:id |
7. 字典
| 权限码 |
菜单 |
ID |
对应接口 |
system:dict:list |
字典管理 |
14 |
类型/字典项查询 |
system:dict:create |
新建字典 |
60 |
创建类型/字典项 |
system:dict:update |
编辑字典 |
61 |
更新类型/字典项 |
system:dict:delete |
删除字典 |
62 |
删除类型/字典项 |
8. 参数
| 权限码 |
菜单 |
ID |
对应接口 |
system:param:list |
参数配置 |
15 |
GET /parameters |
system:param:create |
新建参数 |
70 |
POST /parameters |
system:param:update |
编辑参数 |
71 |
PUT /parameters/:id |
system:param:delete |
删除参数 |
72 |
DELETE /parameters/:id |
9. 文件
| 权限码 |
菜单 |
ID |
对应接口 |
system:file:list |
文件管理 |
16 |
GET /files |
system:file:upload |
上传文件 |
80 |
POST /files |
system:file:delete |
删除文件 |
81 |
DELETE /files/:id |
system:file:download |
下载文件 |
82 |
下载、分享的查看/创建/撤销 |
10. 定时任务
| 权限码 |
菜单 |
ID |
对应接口 |
system:job:list |
定时任务 |
17 |
GET /jobs、/jobs/:id/runs |
system:job:create |
新建任务 |
90 |
POST /jobs |
system:job:update |
编辑任务 |
91 |
PUT /jobs/:id、启停 |
system:job:delete |
删除任务 |
92 |
DELETE /jobs/:id |
system:job:run |
执行任务 |
93 |
POST /jobs/:id/run |
11. 审计
| 权限码 |
菜单 |
ID |
对应接口 |
system:log:operation |
操作日志 |
18 |
查询/删除/清空操作日志 |
system:log:login |
登录日志 |
19 |
查询/清空登录日志 |
12. 在线用户与监控
| 权限码 |
菜单 |
ID |
对应接口 |
system:online:list |
在线用户 |
210 |
GET /online-sessions |
system:online:kick |
强制下线 |
212 |
DELETE /online-sessions/:userID |
system:monitor:view |
系统监控 |
211 |
GET /monitor/overview |
13. 异步导出
| 权限码 |
菜单 |
ID |
对应接口 |
system:export:list |
导出记录 |
200 |
GET /export-tasks、查看文件名模板 |
system:export:submit |
提交导出 |
201 |
POST /export-tasks |
system:export:cancel |
取消导出 |
202 |
POST /export-tasks/:id/cancel |
system:export:delete |
删除记录 |
203 |
DELETE /export-tasks/:id |
system:export:download |
下载导出 |
204 |
GET /export-tasks/:id/download |
system:export:config |
文件名配置 |
205 |
PUT /export-tasks/filename-template |
前端「导出」按钮的显示权限与接口权限是分开的:用户页按钮用 system:user:export,日志页按钮用对应的日志查看权限;而提交任务接口统一要求 system:export:submit,查看任务列表要 system:export:list,下载要 system:export:download。给角色授权时请把这些一起给,否则会出现「能点导出但提交 403」。
14. 种子角色
| 角色 |
code |
ID |
授权 |
| 超级管理员 |
super_admin |
1 |
全部菜单(含后续新增) |
| 运营 |
operator |
2 |
总览、系统/工作台/审计目录、操作日志、登录日志 |
super_admin 的菜单可见性与权限判断都有代码旁路:AuthService.load 会加载全部启用菜单,Principal.Has 直接放行,因此新增菜单无需给该角色补授权。其他角色(如 operator)需要在角色管理里勾选新菜单,或写 sys_role_menus。
15. 新增权限的检查表
16. 常见误区
| 误区 |
事实 |
| 隐藏按钮就等于没权限 |
不是,必须后端 Require |
super_admin 是一个权限码 |
不是,是角色编码,代码里硬编码旁路 |
| 目录节点也要权限码 |
不需要;目录只分组,权限码在菜单/按钮上 |
| 改了菜单名称就改了权限 |
不会;权限看 permission 字段,不是 name |
| 权限改了要重新登录 |
不需要;每次请求重新加载 |
| 给角色授权就等于用户有权限 |
用户还要绑定该角色,且角色/菜单都是启用状态 |