xinli/检查和清理所有用户权限.sql
2025-12-02 15:12:55 +08:00

89 lines
2.8 KiB
SQL

-- ============================================
-- 检查和清理"所有用户"权限记录
-- ============================================
-- 说明:在权限系统中,如果 psy_scale_permission 表中存在
-- user_id、role_id、dept_id 都为空的记录,则表示"所有用户"都有权限
-- 这可能导致用户看到未明确授权的量表/问卷
-- ============================================
-- 1. 查看所有"所有用户"权限记录
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.start_time,
p.end_time,
p.status,
p.create_time,
p.remark
FROM psy_scale_permission p
WHERE p.user_id IS NULL
AND p.role_id IS NULL
AND p.dept_id IS NULL;
-- 2. 统计"所有用户"权限的数量
SELECT
COUNT(*) AS all_users_permission_count,
SUM(CASE WHEN status = '0' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN status = '1' THEN 1 ELSE 0 END) AS inactive_count
FROM psy_scale_permission
WHERE user_id IS NULL
AND role_id IS NULL
AND dept_id IS NULL;
-- 3. 查看哪些量表/问卷被设置为"所有用户"可见
SELECT
CASE
WHEN p.scale_id < 0 THEN '问卷'
ELSE '量表'
END AS type,
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 name,
p.scale_id,
p.status,
p.start_time,
p.end_time
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' -- 只看有效的
ORDER BY type, name;
-- ============================================
-- 清理操作(谨慎执行!)
-- ============================================
-- 4. 【可选】禁用所有"所有用户"权限(将状态改为无效)
-- UPDATE psy_scale_permission
-- SET status = '1',
-- update_time = NOW(),
-- remark = CONCAT(IFNULL(remark, ''), ' [已禁用-原为所有用户权限]')
-- WHERE user_id IS NULL
-- AND role_id IS NULL
-- AND dept_id IS NULL
-- AND status = '0';
-- 5. 【可选】删除所有"所有用户"权限记录
-- DELETE FROM psy_scale_permission
-- WHERE user_id IS NULL
-- AND role_id IS NULL
-- AND dept_id IS NULL;
-- 6. 【可选】删除指定量表/问卷的"所有用户"权限
-- 将 YOUR_SCALE_ID 替换为实际的量表ID
-- DELETE FROM psy_scale_permission
-- WHERE scale_id = YOUR_SCALE_ID
-- AND user_id IS NULL
-- AND role_id IS NULL
-- AND dept_id IS NULL;