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
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
表与权限多对多关联
数据库表结构
核心表
- users - 用户表
- roles - 角色表
- permissions - 权限表
- resources - 资源表
关联表
- user_roles - 用户角色关联表
- role_permissions - 角色权限关联表
- 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. 认证流程
- 用户登录,获取JWT令牌
- 请求时在Header中携带JWT令牌
AuthMiddleware
验证JWT令牌,提取用户ID
2. 权限检查流程
- 从请求中获取资源路径和HTTP方法
- 根据用户ID查询用户的角色
- 根据角色查询对应的权限
- 检查权限是否包含请求的资源和方法
- 返回检查结果
3. 角色检查流程
- 从JWT中获取用户ID
- 查询用户的角色列表
- 检查是否包含所需角色
- 返回检查结果
使用示例
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系统提供了完整的权限管理功能,具有良好的扩展性和可维护性。通过合理的分层架构和模块化设计,可以轻松适应不同的业务需求。系统支持细粒度的权限控制,能够满足大多数企业级应用的权限管理需求。