Skip to content

权限管理模块

概述

权限模块用于管理系统中的细粒度操作权限,包括按钮权限、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按钮权限
1API 权限
3其他权限

HTTP 方法 (http_method)

说明
0GET
1POST
2PUT
3DELETE
4PATCH
5ALL

唯一约束

同一菜单下的权限编码必须唯一:

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
}

权限校验流程

  1. 请求到达 API 端点
  2. 中间件提取用户角色
  3. 查询角色关联的权限
  4. 匹配请求路径和方法
  5. 通过则继续,否则返回 403

与其他模块的关系

  • 菜单模块:权限通过 menu_id 关联菜单
  • 角色模块:角色通过 core_role_permission 关联权限
  • 表单模块:表单发布时自动创建权限
  • 数据权限:已迁移到 ResourceDataScopeConfig 模型

Released under the MIT License.