# 问卷权限问题修复说明 ## 问题描述 用户反馈:问卷明明没有设置权限,但用户却能够查看。 ## 问题根源 在权限系统中存在一个**"所有用户"权限机制**: ### 权限查询逻辑(`PsyScalePermissionMapper.xml`) ```sql -- 或者所有用户权限(user_id, role_id, dept_id 都为空) or (p.user_id is null and p.role_id is null and p.dept_id is null) ``` 这意味着:**如果在 `psy_scale_permission` 表中存在一条记录,其 `user_id`、`role_id`、`dept_id` 都为空,那么所有用户都能看到这个量表/问卷!** ### 问题产生原因 1. 当在权限管理页面新增权限时,如果**不选择任何用户**(留空),系统会创建一条 `user_id = null` 的记录 2. 这条记录会被解释为"所有用户都有权限" 3. 在权限列表中,这种记录会显示为"所有用户"标签,但之前不够明显 ## 修复内容 ### 1. 前端权限管理页面优化 修改文件:`xinli-ui/src/views/psychology/permission/index.vue` **改进内容:** 1. **列表显示优化** - 列名从"用户名称"改为"授权范围" - "所有用户"权限使用醒目的橙色警告标签显示 - 显示"所有用户都可访问"的提示文字 2. **新增筛选功能** - 添加"授权范围"筛选下拉框 - 可以快速筛选"所有用户"或"指定用户"权限 3. **添加明确的"所有用户"开关** - 新增权限时有"授权范围"选项,可以选择"所有用户"或"指定用户" - 启用"所有用户"时会显示警告提示 4. **强制用户选择** - 如果不启用"所有用户"开关,必须选择至少一个用户 - 防止意外创建"所有用户"权限 5. **二次确认** - 选择"所有用户"时会弹出确认框,提醒用户这将使所有人都能看到该量表/问卷 ### 2. 数据库检查脚本 创建文件:`检查和清理所有用户权限.sql` 提供SQL脚本用于: - 查看所有"所有用户"权限记录 - 统计"所有用户"权限数量 - 禁用或删除"所有用户"权限 ## 如何检查现有数据 1. 运行以下SQL查看当前存在的"所有用户"权限: ```sql SELECT p.permission_id, p.scale_id, CASE WHEN p.scale_id < 0 THEN (SELECT questionnaire_name FROM psy_questionnaire WHERE questionnaire_id = -p.scale_id) ELSE (SELECT scale_name FROM psy_scale WHERE scale_id = p.scale_id) END AS scale_name, CASE WHEN p.scale_id < 0 THEN '问卷' ELSE '量表' END AS type, p.status FROM psy_scale_permission p WHERE p.user_id IS NULL AND p.role_id IS NULL AND p.dept_id IS NULL AND p.status = '0'; ``` 2. 如果发现不需要的"所有用户"权限,可以: - 在权限管理页面找到该记录(显示"所有用户"标签),点击删除 - 或直接在数据库中删除/禁用 ## 如何清理不需要的权限 ### 方法1:通过管理界面 1. 进入 **心理测评管理** → **量表权限管理** 2. 找到显示"所有用户"标签的权限记录 3. 点击"删除"按钮 ### 方法2:通过SQL ```sql -- 禁用所有"所有用户"权限 UPDATE psy_scale_permission SET status = '1', update_time = NOW() WHERE user_id IS NULL AND role_id IS NULL AND dept_id IS NULL AND status = '0'; -- 或者直接删除 DELETE FROM psy_scale_permission WHERE user_id IS NULL AND role_id IS NULL AND dept_id IS NULL; ``` ## 权限优先级说明 系统权限检查顺序: 1. **用户直接权限**: `user_id = 当前用户ID` 2. **角色权限**: `role_id = 用户的角色ID` 3. **部门权限**: `dept_id = 用户的部门ID` 4. **全局权限**: `user_id`, `role_id`, `dept_id` 都为空(所有用户) 只要满足任意一个条件,用户就能看到该量表/问卷。 ## 注意事项 1. 修改后,新增权限时必须明确选择"所有用户"或指定具体用户 2. 建议检查现有数据,清理不需要的"所有用户"权限 3. 管理员角色(admin)不受权限限制,始终可以看到所有量表/问卷