# 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. 创建角色 ```json POST /api/roles { "name": "内容管理员", "code": "CONTENT_ADMIN", "description": "负责内容管理的角色" } ``` ### 2. 创建权限 ```json POST /api/permissions { "name": "查看文章", "description": "查看文章列表和详情", "resource": "/api/articles", "action": "GET" } ``` ### 3. 为角色分配权限 ```json POST /api/permissions/roles/1/assign { "permission_ids": [1, 2, 3] } ``` ### 4. 为用户分配角色 ```json POST /api/roles/users/1/assign { "role_ids": [1, 2] } ``` ### 5. 使用权限中间件 ```go // 在路由中使用权限中间件 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系统提供了完整的权限管理功能,具有良好的扩展性和可维护性。通过合理的分层架构和模块化设计,可以轻松适应不同的业务需求。系统支持细粒度的权限控制,能够满足大多数企业级应用的权限管理需求。