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.

236 lines
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. 创建角色
```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系统提供了完整的权限管理功能,具有良好的扩展性和可维护性。通过合理的分层架构和模块化设计,可以轻松适应不同的业务需求。系统支持细粒度的权限控制,能够满足大多数企业级应用的权限管理需求。