You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

6.4 KiB

RBAC权限管理系统总结

系统概述

本系统实现了完整的基于角色的访问控制(RBAC)模型,包括用户、角色、权限、资源四个核心实体,以及它们之间的关联关系。

核心实体

1. 用户(User)

  • 功能:系统用户,可以分配角色
  • 主要字段:ID、用户名、邮箱、密码、状态等
  • 关联:通过 user_roles 表与角色多对多关联

2. 角色(Role)

  • 功能:用户组,可以分配权限
  • 主要字段:ID、名称、代码、描述等
  • 关联:通过 role_permissions 表与权限多对多关联

3. 权限(Permission)

  • 功能:具体的操作权限
  • 主要字段:ID、名称、描述、资源、操作等
  • 关联:通过 role_permissions 表与角色多对多关联

4. 资源(Resource)

  • 功能:系统中的可访问资源(API、菜单、按钮等)
  • 主要字段:ID、名称、代码、类型、路径、方法、模块等
  • 关联:通过 resource_permissions 表与权限多对多关联

数据库表结构

核心表

  1. users - 用户表
  2. roles - 角色表
  3. permissions - 权限表
  4. resources - 资源表

关联表

  1. user_roles - 用户角色关联表
  2. role_permissions - 角色权限关联表
  3. resource_permissions - 资源权限关联表

系统架构

分层架构

Controller Layer (控制器层)
    ↓
Service Layer (服务层)
    ↓
Repository Layer (仓库层)
    ↓
Database Layer (数据库层)

核心组件

1. 控制器(Controllers)

  • UserController - 用户管理
  • RoleController - 角色管理
  • PermissionController - 权限管理
  • ResourceController - 资源管理

2. 服务(Services)

  • UserService - 用户业务逻辑
  • RoleService - 角色业务逻辑
  • PermissionService - 权限业务逻辑
  • ResourceService - 资源业务逻辑

3. 仓库(Repositories)

  • UserRepository - 用户数据访问
  • RoleRepository - 角色数据访问
  • PermissionRepository - 权限数据访问
  • ResourceRepository - 资源数据访问

4. 中间件(Middlewares)

  • AuthMiddleware - 认证中间件
  • PermissionMiddleware - 权限检查中间件
  • RoleMiddleware - 角色检查中间件

API接口

用户管理

  • GET /api/users - 获取用户列表
  • POST /api/users - 创建用户
  • GET /api/users/:id - 获取用户详情
  • PUT /api/users/:id - 更新用户
  • DELETE /api/users/:id - 删除用户

角色管理

  • GET /api/roles - 获取角色列表
  • POST /api/roles - 创建角色
  • GET /api/roles/:id - 获取角色详情
  • PUT /api/roles/:id - 更新角色
  • DELETE /api/roles/:id - 删除角色
  • POST /api/roles/users/:userId/assign - 为用户分配角色
  • GET /api/roles/users/:userId - 获取用户的角色列表
  • DELETE /api/roles/users/:userId/remove - 从用户移除角色

权限管理

  • GET /api/permissions - 获取权限列表
  • POST /api/permissions - 创建权限
  • GET /api/permissions/:id - 获取权限详情
  • PUT /api/permissions/:id - 更新权限
  • DELETE /api/permissions/:id - 删除权限
  • GET /api/permissions/resource/:resource - 根据资源获取权限
  • POST /api/permissions/roles/:roleId/assign - 为角色分配权限
  • GET /api/permissions/roles/:roleId - 获取角色的权限列表
  • DELETE /api/permissions/roles/:roleId/remove - 从角色移除权限

资源管理

  • GET /api/resources - 获取资源列表
  • POST /api/resources - 创建资源
  • GET /api/resources/:id - 获取资源详情
  • PUT /api/resources/:id - 更新资源
  • DELETE /api/resources/:id - 删除资源
  • GET /api/resources/tree - 获取资源树
  • POST /api/resources/sync - 同步资源
  • GET /api/resources/module/:module - 按模块获取资源
  • GET /api/resources/type/:type - 按类型获取资源

权限检查流程

1. 认证流程

  1. 用户登录,获取JWT令牌
  2. 请求时在Header中携带JWT令牌
  3. AuthMiddleware 验证JWT令牌,提取用户ID

2. 权限检查流程

  1. 从请求中获取资源路径和HTTP方法
  2. 根据用户ID查询用户的角色
  3. 根据角色查询对应的权限
  4. 检查权限是否包含请求的资源和方法
  5. 返回检查结果

3. 角色检查流程

  1. 从JWT中获取用户ID
  2. 查询用户的角色列表
  3. 检查是否包含所需角色
  4. 返回检查结果

使用示例

1. 创建角色

POST /api/roles
{
    "name": "内容管理员",
    "code": "CONTENT_ADMIN",
    "description": "负责内容管理的角色"
}

2. 创建权限

POST /api/permissions
{
    "name": "查看文章",
    "description": "查看文章列表和详情",
    "resource": "/api/articles",
    "action": "GET"
}

3. 为角色分配权限

POST /api/permissions/roles/1/assign
{
    "permission_ids": [1, 2, 3]
}

4. 为用户分配角色

POST /api/roles/users/1/assign
{
    "role_ids": [1, 2]
}

5. 使用权限中间件

// 在路由中使用权限中间件
router.GET("/api/articles", 
    middleware.AuthMiddleware(jwtSecret),
    middleware.PermissionMiddleware(db, "/api/articles", "GET"),
    articleController.ListArticles)

特色功能

1. 资源自动同步

  • 系统可以从路由定义自动同步资源
  • 支持批量创建和更新资源
  • 提供资源树形结构展示

2. 灵活的权限检查

  • 支持基于资源的权限检查
  • 支持基于角色的权限检查
  • 支持多种中间件组合使用

3. 完整的CRUD操作

  • 所有实体都支持完整的增删改查
  • 支持分页查询
  • 支持条件筛选

4. 数据完整性保护

  • 删除前检查关联关系
  • 防止误删除正在使用的数据
  • 事务保证数据一致性

扩展建议

1. 权限缓存

  • 使用Redis缓存用户权限
  • 提高权限检查性能
  • 支持权限变更时自动更新缓存

2. 权限继承

  • 实现角色权限继承
  • 支持多级角色体系
  • 简化权限管理

3. 动态权限

  • 支持运行时权限变更
  • 无需重启即可生效
  • 提供权限变更审计

4. 权限审计

  • 记录权限变更日志
  • 提供权限使用统计
  • 支持权限合规检查

总结

本RBAC系统提供了完整的权限管理功能,具有良好的扩展性和可维护性。通过合理的分层架构和模块化设计,可以轻松适应不同的业务需求。系统支持细粒度的权限控制,能够满足大多数企业级应用的权限管理需求。