106 lines
4.4 KiB
Markdown
106 lines
4.4 KiB
Markdown
# 权限节点配置
|
||
|
||
后端代码中的 `@permission_required("sys:position:page")` 装饰器定义了接口所需的权限字符串,但权限节点本身需要在数据库中配置,才能在「菜单管理」中分配给角色。
|
||
|
||
## 权限字符串格式
|
||
|
||
```
|
||
sys:{module}:{action}
|
||
```
|
||
|
||
| 部分 | 说明 | 示例 |
|
||
|:----|:----|:----|
|
||
| `sys` | 系统前缀(固定) | `sys` |
|
||
| `module` | 模块名(小写) | `position` |
|
||
| `action` | 操作名 | `page` / `add` / `update` / `delete` |
|
||
|
||
## Position 模块的权限节点
|
||
|
||
| 权限字符串 | 说明 | HTTP 方法 | 路径 |
|
||
|:----|:----|:----|:----|
|
||
| `sys:position:page` | 分页查询 | GET | `/api/v1/position/page` |
|
||
| `sys:position:detail` | 详情查询 | GET | `/api/v1/position/detail/{id}` |
|
||
| `sys:position:list` | 列表查询 | GET | `/api/v1/position/getPositionList` |
|
||
| `sys:position:add` | 新增岗位 | POST | `/api/v1/position/add` |
|
||
| `sys:position:update` | 更新岗位 | PUT | `/api/v1/position/update` |
|
||
| `sys:position:delete` | 删除岗位 | DELETE | `/api/v1/position/delete/{id}` |
|
||
| `sys:position:batchDelete` | 批量删除 | POST | `/api/v1/position/batchDelete` |
|
||
| `sys:position:status` | 状态变更 | PUT | `/api/v1/position/status` |
|
||
|
||
## 配置步骤
|
||
|
||
### 第一步:添加菜单节点
|
||
|
||
登录管理后台,进入「系统管理 → 菜单管理」:
|
||
|
||
1. 找到或创建「岗位管理」菜单项
|
||
2. 在该菜单下添加「权限」类型子节点
|
||
3. 填写以下信息:
|
||
|
||
| 字段 | 值 |
|
||
|:----|:----|
|
||
| 菜单类型 | 权限 |
|
||
| 权限标识 | `sys:position:page` |
|
||
| 菜单名称 | 岗位查询 |
|
||
|
||
### 第二步:批量添加权限节点
|
||
|
||
为每个接口重复上述步骤,添加全部 8 个权限节点。
|
||
|
||
:::tip 温馨提示
|
||
实际开发中,查询类权限(page、detail、list)通常合并为一个节点 `sys:position:list`,减少配置工作量。写操作(add、update、delete、batchDelete、status)建议独立配置,便于细粒度控制。
|
||
:::
|
||
|
||
### 第三步:分配给角色
|
||
|
||
权限节点创建并启用后,需将其分配给角色,用户才能通过角色继承相应权限。
|
||
|
||
操作路径:「系统管理 → 角色管理」
|
||
|
||
1. 在角色列表中找到目标角色,点击「编辑」进入权限配置页面。
|
||
2. 在权限树中展开「岗位管理」模块,勾选需要分配的权限节点(如「新增」「编辑」「删除」等)。
|
||
3. 点击「保存」提交配置,权限即生效。
|
||
|
||
:::warning 特别说明
|
||
注意:权限分配后,拥有该角色的用户需重新登录或刷新页面才能获取最新权限。若权限未生效,请检查用户是否已正确关联该角色。
|
||
:::
|
||
|
||
## 权限校验流程
|
||
|
||
```
|
||
用户请求 → login_required(JWT 校验) → permission_required(权限校验)
|
||
├── 用户 ID = 1(admin)→ 跳过权限校验,直接放行
|
||
└── 其他用户 → 查询角色权限列表 → 匹配权限字符串 → 放行 / 拒绝
|
||
```
|
||
|
||
## SQL 直接插入权限节点
|
||
|
||
如果需要通过 SQL 直接插入权限节点(如初始化脚本),参考以下语句:
|
||
|
||
```sql
|
||
-- 假设岗位管理菜单 ID 为 100
|
||
INSERT INTO tornado_menu (name, parent_id, path, component, perms, type, icon, sort, create_time, is_delete)
|
||
VALUES
|
||
('岗位查询', 100, NULL, NULL, 'sys:position:page', '1', NULL, 0, NOW(), 0),
|
||
('岗位新增', 100, NULL, NULL, 'sys:position:add', '1', NULL, 0, NOW(), 0),
|
||
('岗位编辑', 100, NULL, NULL, 'sys:position:update', '1', NULL, 0, NOW(), 0),
|
||
('岗位删除', 100, NULL, NULL, 'sys:position:delete', '1', NULL, 0, NOW(), 0),
|
||
('岗位批量删除', 100, NULL, NULL, 'sys:position:batchDelete', '1', NULL, 0, NOW(), 0),
|
||
('岗位状态', 100, NULL, NULL, 'sys:position:status', '1', NULL, 0, NOW(), 0);
|
||
```
|
||
|
||
:::danger 特别说明
|
||
其中 `type='1'` 表示权限类型节点(非菜单)。
|
||
:::
|
||
|
||
## 开发要点
|
||
|
||
1. 权限字符串必须与代码中的 `@permission_required` 完全一致。
|
||
2. admin 用户(ID=1)自动跳过权限校验:开发阶段可用 admin 测试。
|
||
3. 权限节点是菜单的子节点:type 为 `1`(权限),不是 `0`(菜单)。
|
||
4. 查询权限可适当合并:减少配置复杂度。
|
||
5. 写操作权限建议独立:便于细粒度控制。
|
||
## 总结
|
||
|
||
权限节点是菜单的子节点(type=1),命名规范为 `sys:{模块}:{操作}`。后端通过 `@permission_required` 装饰器校验,前端通过 `v-perm` 指令控制按钮显示。查询权限可适当合并,写操作权限建议独立以实现细粒度控制。
|