# 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框架开发,遵循了框架的设计规范和代码风格,易于维护和扩展。