Files
2026-09-12 23:12:15 +08:00

106 lines
4.4 KiB
Markdown
Raw Permalink 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.
# 权限节点配置
后端代码中的 `@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/list` |
| `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` | 批量删除 | DELETE | `/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 fastapi_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` 指令控制按钮显示。查询权限可适当合并,写操作权限建议独立以实现细粒度控制。