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