xinli/z_Project change/进度汇总/14-用户注册和量表权限管理功能开发.md
2025-11-12 15:25:47 +08:00

302 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 14-用户注册和量表权限管理功能开发
## 功能概述
本功能模块实现了用户自主注册和量表权限管理功能,允许用户自行注册账号,管理员可以为用户分配量表访问权限,普通用户只能访问被分配权限的量表进行测评。
## 开发时间
2025-11-06
## 功能特性
### 1. 用户注册功能
- 用户可以通过注册页面自行注册账号
- 注册功能基于RuoYi框架现有的注册功能
- 注册成功后,用户可以使用注册的账号登录系统
### 2. 量表权限管理
- 管理员可以管理用户对量表的访问权限
- 支持按用户、角色、部门分配权限
- 支持权限的有效期设置(开始时间、结束时间)
- 支持权限状态管理(有效/无效)
### 3. 权限过滤
- 普通用户在选择量表时,只能看到被分配权限的量表
- 管理员可以看到所有量表
- 如果用户没有分配任何权限,会提示联系管理员
## 数据库设计
### 量表权限表psy_scale_permission
该表已在 `sql/psychological_system_complete.sql` 中定义:
```sql
CREATE TABLE `psy_scale_permission` (
`permission_id` bigint NOT NULL AUTO_INCREMENT COMMENT '权限ID',
`scale_id` bigint NOT NULL COMMENT '量表ID',
`dept_id` bigint DEFAULT NULL COMMENT '部门ID关联sys_dept为空表示所有部门',
`role_id` bigint DEFAULT NULL COMMENT '角色ID关联sys_role为空表示所有角色',
`user_id` bigint DEFAULT NULL COMMENT '用户ID关联sys_user为空表示所有用户',
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称(特殊字段,用于罪犯管理)',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`status` char(1) DEFAULT '0' COMMENT '状态0有效 1无效',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`permission_id`),
KEY `idx_scale_id` (`scale_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='量表权限表';
```
## 后端开发
### 1. 实体类
**文件**: `ry-news-system/src/main/java/com/ddnai/system/domain/psychology/PsyScalePermission.java`
- 定义了量表权限的所有字段
- 包含关联查询字段scaleName, deptName, roleName, userName
### 2. Mapper接口和XML
**文件**:
- `ry-news-system/src/main/java/com/ddnai/system/mapper/psychology/PsyScalePermissionMapper.java`
- `ry-news-system/src/main/resources/mapper/system/psychology/PsyScalePermissionMapper.xml`
**核心方法**:
- `selectPermissionList`: 查询权限列表
- `selectScaleIdsByUserId`: 根据用户ID查询用户有权限访问的量表ID列表
- `checkUserScalePermission`: 检查用户是否有权限访问指定量表
- `batchAssignUserScalePermission`: 批量分配用户量表权限
### 3. Service接口和实现
**文件**:
- `ry-news-system/src/main/java/com/ddnai/system/service/psychology/IPsyScalePermissionService.java`
- `ry-news-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyScalePermissionServiceImpl.java`
**核心功能**:
- 权限查询和管理
- 用户权限检查(管理员自动拥有所有权限)
- 批量权限分配
### 4. Controller
**文件**: `ry-news-admin/src/main/java/com/ddnai/web/controller/psychology/PsyScalePermissionController.java`
**API接口**:
- `GET /psychology/permission/list` - 获取权限列表
- `GET /psychology/permission/{permissionId}` - 获取权限详情
- `GET /psychology/permission/user/{userId}/scales` - 获取用户有权限的量表ID列表
- `GET /psychology/permission/check/{userId}/{scaleId}` - 检查用户是否有权限
- `POST /psychology/permission` - 新增权限
- `PUT /psychology/permission` - 修改权限
- `DELETE /psychology/permission/{permissionIds}` - 删除权限
- `POST /psychology/permission/assign` - 批量分配用户量表权限
## 前端开发
### 1. API文件
**文件**: `ruoyi-ui/src/api/psychology/permission.js`
提供了所有权限相关的API调用方法。
### 2. 量表权限管理页面
**文件**: `ruoyi-ui/src/views/psychology/permission/index.vue`
**功能**:
- 权限列表查询(支持按量表、用户、状态筛选)
- 新增权限
- 修改权限
- 删除权限
- 显示权限详细信息(量表名称、用户名称、部门、角色、时间范围等)
### 3. 用户量表权限分配页面
**文件**: `ruoyi-ui/src/views/psychology/permission/user.vue`
**功能**:
- 使用Transfer组件进行量表权限分配
- 显示用户名称
- 支持搜索和筛选量表
- 批量保存权限
### 4. 用户管理页面集成
**文件**: `ruoyi-ui/src/views/system/user/index.vue`
**修改**:
- 在用户操作下拉菜单中添加"分配量表权限"选项
- 点击后跳转到用户量表权限分配页面
### 5. 量表选择页面权限过滤
**文件**: `ruoyi-ui/src/views/psychology/assessment/start.vue`
**修改**:
- 管理员userId === 1显示所有量表
- 普通用户只显示有权限的量表
- 如果用户没有权限,显示提示信息
### 6. 路由配置
**文件**: `ruoyi-ui/src/router/index.js`
**新增路由**:
- `/psychology/permission` - 量表权限管理
- `/psychology/permission/user/:userId` - 用户量表权限分配
## 菜单配置
`sql/psychological_system_complete.sql` 中添加了量表权限管理的菜单配置:
- **菜单名称**: 量表权限管理
- **路径**: `permission`
- **组件**: `psychology/permission/index`
- **权限标识**: `psychology:permission:list`
**按钮权限**:
- `psychology:permission:query` - 权限查询
- `psychology:permission:add` - 权限新增
- `psychology:permission:edit` - 权限修改
- `psychology:permission:remove` - 权限删除
## 使用方法
### 1. 用户注册
1. 访问系统注册页面(通常在登录页面有注册链接)
2. 填写用户名、密码、确认密码
3. 输入验证码(如果启用)
4. 点击注册按钮
5. 注册成功后,使用注册的账号登录系统
### 2. 管理员分配量表权限
#### 方法一:通过量表权限管理页面
1. 登录管理员账号
2. 进入"心理测评管理" -> "量表权限管理"
3. 点击"新增"按钮
4. 选择量表、用户(可选)、开始时间、结束时间、状态
5. 点击"确定"保存
#### 方法二:通过用户管理页面
1. 登录管理员账号
2. 进入"系统管理" -> "用户管理"
3. 找到要分配权限的用户
4. 点击操作列的"更多" -> "分配量表权限"
5. 在权限分配页面使用Transfer组件选择要分配的量表
6. 点击"保存"按钮
### 3. 用户选择量表进行测评
1. 用户登录系统
2. 进入"心理测评管理" -> "测评管理"
3. 点击"开始测评"按钮
4. 在量表选择页面,只能看到被分配权限的量表
5. 选择量表后,继续完成测评流程
## 权限规则
### 权限匹配规则
系统按以下优先级检查用户是否有权限访问量表:
1. **用户直接权限**: 如果存在 `user_id = 当前用户ID` 的权限记录
2. **角色权限**: 如果存在 `role_id = 用户角色ID` 的权限记录
3. **部门权限**: 如果存在 `dept_id = 用户部门ID` 的权限记录
4. **全局权限**: 如果存在 `user_id`, `role_id`, `dept_id` 都为空的权限记录(表示所有用户)
### 时间范围检查
- 如果权限设置了 `start_time`,当前时间必须 >= `start_time`
- 如果权限设置了 `end_time`,当前时间必须 <= `end_time`
- 如果时间字段为空,表示无时间限制
### 状态检查
- 只有 `status = '0'`(有效)的权限才会生效
### 管理员权限
- 管理员userId = 1自动拥有所有量表的访问权限不受权限表限制
## 注意事项
1. **注册功能**: 需要确保系统配置中启用了注册功能(`sys.account.registerUser = true`
2. **权限分配**: 建议在用户注册后,管理员及时为用户分配量表权限
3. **权限清理**: 删除用户时,会自动删除该用户的所有权限(通过外键约束)
4. **权限冲突**: 如果用户同时拥有多种类型的权限(用户、角色、部门),只要满足其中一种即可访问
5. **性能优化**: 权限查询使用了索引,但在大量用户和量表的情况下,建议定期清理无效权限
## 文件清单
### 后端文件
- `ry-news-system/src/main/java/com/ddnai/system/domain/psychology/PsyScalePermission.java`
- `ry-news-system/src/main/java/com/ddnai/system/mapper/psychology/PsyScalePermissionMapper.java`
- `ry-news-system/src/main/resources/mapper/system/psychology/PsyScalePermissionMapper.xml`
- `ry-news-system/src/main/java/com/ddnai/system/service/psychology/IPsyScalePermissionService.java`
- `ry-news-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyScalePermissionServiceImpl.java`
- `ry-news-admin/src/main/java/com/ddnai/web/controller/psychology/PsyScalePermissionController.java`
### 前端文件
- `ruoyi-ui/src/api/psychology/permission.js`
- `ruoyi-ui/src/views/psychology/permission/index.vue`
- `ruoyi-ui/src/views/psychology/permission/user.vue`
- `ruoyi-ui/src/views/system/user/index.vue` (修改)
- `ruoyi-ui/src/views/psychology/assessment/start.vue` (修改)
- `ruoyi-ui/src/router/index.js` (修改)
### 配置文件
- `sql/psychological_system_complete.sql` (菜单配置)
## 测试建议
1. **注册功能测试**
- 测试正常注册流程
- 测试用户名重复、密码格式验证
- 测试验证码功能
2. **权限分配测试**
- 测试通过权限管理页面分配权限
- 测试通过用户管理页面分配权限
- 测试批量分配权限
- 测试权限的时间范围限制
3. **权限过滤测试**
- 测试普通用户只能看到有权限的量表
- 测试管理员可以看到所有量表
- 测试无权限用户的提示信息
4. **权限检查测试**
- 测试用户直接权限
- 测试角色权限
- 测试部门权限
- 测试全局权限
- 测试权限过期情况
## 后续优化建议
1. **批量操作**: 支持批量为用户分配多个量表权限
2. **权限模板**: 支持创建权限模板,快速为多个用户分配相同权限
3. **权限统计**: 添加权限使用统计功能
4. **权限审批**: 支持权限申请和审批流程
5. **权限继承**: 支持部门权限继承到子部门
6. **权限导出**: 支持导出用户权限列表
## 总结
本功能模块完整实现了用户注册和量表权限管理功能管理员可以灵活地为用户分配量表访问权限普通用户只能访问被分配权限的量表有效控制了系统的访问范围。功能基于RuoYi框架开发遵循了框架的设计规范和代码风格易于维护和扩展。