Skip to content

角色管理模块

概述

角色模块用于管理系统角色和权限分配,支持角色与菜单、权限、部门的多对多关联,是 RBAC(基于角色的访问控制)的核心组件。

模块路径backend-fastapi/core/role/

API 前缀/api/core/roles

数据模型

python
class Role(BaseModel):
    __tablename__ = "core_role"

    name: str           # 角色名称
    code: str           # 角色编码(唯一)
    role_type: int      # 角色类型
    status: bool        # 角色状态(启用/禁用)
    priority: int       # 角色优先级(数字越大优先级越高)
    description: str    # 角色描述
    remark: str         # 备注信息

角色类型 (role_type)

说明
0系统角色(不可删除)
1自定义角色

关联表

角色与其他实体通过中间表建立多对多关系:

关联表说明
core_role_menu角色-菜单关联
core_role_permission角色-权限关联
core_role_dept角色-部门关联(用于数据权限)

服务层

RoleService 继承 BaseService,提供以下方法:

基础操作

方法说明
create(db, data)创建角色(处理多对多关系)
update(db, record_id, data)更新角色(处理多对多关系)
get_by_id_with_relations(db, record_id)获取角色详情(含关联数据)
get_all_active(db)获取所有启用的角色
get_by_ids(db, ids)批量获取角色
search(db, keyword, page, page_size)搜索角色

权限管理

方法说明
update_menus_permissions(db, role_id, menu_ids, permission_ids)更新角色的菜单和权限
update_permissions(db, role_id, permission_ids)更新角色的权限
get_menu_permission_tree(db, role)获取角色的菜单权限树
get_role_menus(db, role, application_id)获取角色的菜单列表
get_menu_permissions(db, role, menu_id)获取指定菜单的权限列表

用户管理

方法说明
get_role_users(db, role_id, page, page_size, username)获取角色下的用户列表
add_users_to_role(db, role_id, user_ids)将用户添加到角色
remove_users_from_role(db, role_id, user_ids)从角色中移除用户
get_user_count(db, role_id)获取角色下的用户数量

批量操作

方法说明
batch_update_status(db, ids, status)批量更新状态(系统角色不能禁用)
batch_delete(db, ids, hard)批量删除
can_delete(db, role_id)检查角色是否可删除
copy_role(db, source_role_id, new_name, new_code)复制角色

缓存清除

当角色的菜单或权限变更时,系统自动清除相关缓存:

python
async def _invalidate_role_related_cache(cls, role_id: str):
    # 1. 清除菜单路由缓存
    await MenuService.invalidate_cache()
    
    # 2. 清除该角色的 API 权限 Redis 缓存
    await clear_role_permission_cache(role_id)
    
    # 3. 清除所有用户的 Redis 用户信息缓存
    await delete_all_cached_user_info()

API 接口

基础 CRUD

方法路径说明
POST/创建角色
GET/获取角色列表
GET/{record_id}获取角色详情
PUT/{record_id}更新角色
DELETE/{record_id}删除角色

权限配置

方法路径说明
GET/{role_id}/menus获取角色菜单树
GET/{role_id}/menus/{menu_id}/permissions获取菜单权限列表
PUT/{role_id}/menus-permissions更新菜单和权限

用户管理

方法路径说明
GET/{role_id}/users获取角色用户列表
POST/{role_id}/users添加用户到角色
DELETE/{role_id}/users从角色移除用户

其他

方法路径说明
POST/{role_id}/copy复制角色
GET/active获取所有启用的角色

请求/响应示例

创建角色

请求

json
POST /api/core/roles
{
  "name": "项目经理",
  "code": "project_manager",
  "role_type": 1,
  "priority": 50,
  "description": "项目管理角色",
  "menu_ids": ["menu001", "menu002"],
  "permission_ids": ["perm001", "perm002"]
}

获取菜单权限树

响应

json
{
  "menu_tree": [
    {
      "id": "menu001",
      "label": "系统管理",
      "checked": true,
      "children": [
        {
          "id": "menu002",
          "label": "用户管理",
          "checked": true,
          "children": [
            {
              "id": "perm001",
              "label": "新增用户",
              "code": "user:add",
              "permission_type": 0,
              "permission_type_display": "按钮权限",
              "checked": true
            }
          ]
        }
      ]
    }
  ],
  "selected_menu_ids": ["menu001", "menu002"],
  "selected_permission_ids": ["perm001"]
}

与其他模块的关系

  • 用户模块:用户通过 core_user_role 关联多个角色
  • 菜单模块:角色通过 core_role_menu 关联菜单
  • 权限模块:角色通过 core_role_permission 关联权限
  • 部门模块:角色通过 core_role_dept 关联部门(数据权限)

Released under the MIT License.