权限管理模块
概述
权限模块用于管理系统中的细粒度操作权限,包括按钮权限、API 权限等。权限与菜单关联,通过角色分配给用户。
模块路径:backend-fastapi/core/permission/
API 前缀:/api/core/permissions
数据模型
python
class Permission(BaseModel):
__tablename__ = "core_permission"
menu_id: str # 关联菜单 ID(逻辑外键)
name: str # 权限名称
code: str # 权限编码
permission_type: int # 权限类型
api_path: str # API 路径
http_method: int # HTTP 方法
description: str # 权限描述
is_active: bool # 是否启用权限类型 (permission_type)
| 值 | 说明 |
|---|---|
0 | 按钮权限 |
1 | API 权限 |
3 | 其他权限 |
HTTP 方法 (http_method)
| 值 | 说明 |
|---|---|
0 | GET |
1 | POST |
2 | PUT |
3 | DELETE |
4 | PATCH |
5 | ALL |
唯一约束
同一菜单下的权限编码必须唯一:
python
UniqueConstraint('menu_id', 'code', name='uq_permission_menu_code')服务层
PermissionService 继承 BaseService,提供以下方法:
基础查询
| 方法 | 说明 |
|---|---|
check_code_unique(db, menu_id, code, exclude_id) | 检查权限编码唯一性 |
get_by_menu(db, menu_id) | 根据菜单获取权限列表 |
get_by_type(db, permission_type) | 根据类型获取权限列表 |
get_all_active(db) | 获取所有启用的权限 |
get_by_ids(db, ids) | 批量获取权限 |
search(db, keyword, page, page_size) | 搜索权限 |
批量操作
| 方法 | 说明 |
|---|---|
batch_update_status(db, ids, is_active) | 批量更新状态 |
batch_delete(db, ids, hard) | 批量删除 |
自动生成
| 方法 | 说明 |
|---|---|
get_all_routes_from_app(app) | 从 FastAPI 应用获取所有路由 |
batch_create_from_routes(db, menu_id, routes) | 从路由批量创建权限 |
auto_generate_permissions(db, app, dry_run) | 自动扫描并生成权限 |
权限编码规范
权限编码由 API 路径和方法组成:
/api/core/user → api:core:user:get
/api/core/user → api:core:user:post
/api/core/user/{id} → api:core:user:put表单权限编码
低代码表单发布时自动创建 6 种权限:
| 编码格式 | 说明 |
|---|---|
form:{code}:view | 查看权限 |
form:{code}:add | 新增权限 |
form:{code}:edit | 编辑权限 |
form:{code}:delete | 删除权限 |
form:{code}:export | 导出权限 |
form:{code}:import | 导入权限 |
API 接口
基础 CRUD
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | / | 创建权限 |
| GET | / | 获取权限列表 |
| GET | /{record_id} | 获取权限详情 |
| PUT | /{record_id} | 更新权限 |
| DELETE | /{record_id} | 删除权限 |
批量操作
| 方法 | 路径 | 说明 |
|---|---|---|
| PUT | /batch/status | 批量更新状态 |
| DELETE | /batch | 批量删除 |
查询
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /menu/{menu_id} | 获取菜单下的权限 |
| GET | /type/{permission_type} | 按类型获取权限 |
| GET | /search | 搜索权限 |
自动生成
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /auto-generate | 自动生成 API 权限 |
| GET | /auto-generate/preview | 预览自动生成结果 |
请求/响应示例
创建权限
请求:
json
POST /api/core/permissions
{
"menu_id": "menu001",
"name": "新增用户",
"code": "user:add",
"permission_type": 0,
"api_path": "/api/core/users",
"http_method": 1,
"description": "新增用户按钮权限"
}自动生成权限
响应:
json
{
"created": 50,
"skipped": 10,
"failed": 0,
"unmatched_routes": 5,
"errors": [],
"dry_run": false
}权限校验流程
- 请求到达 API 端点
- 中间件提取用户角色
- 查询角色关联的权限
- 匹配请求路径和方法
- 通过则继续,否则返回 403
与其他模块的关系
- 菜单模块:权限通过
menu_id关联菜单 - 角色模块:角色通过
core_role_permission关联权限 - 表单模块:表单发布时自动创建权限
- 数据权限:已迁移到
ResourceDataScopeConfig模型