xinli/检查权限数据.sql

181 lines
5.1 KiB
MySQL
Raw Normal View History

2025-12-02 15:12:55 +08:00
-- ========================================
-- 权限数据检查 SQL 脚本
-- ========================================
-- 1. 查看所有用户及其权限数量
SELECT
u.user_id,
u.user_name,
u.nick_name,
COUNT(DISTINCT p.scale_id) as
FROM sys_user u
LEFT JOIN psy_scale_permission p ON u.user_id = p.user_id AND p.status = '0'
GROUP BY u.user_id, u.user_name, u.nick_name
ORDER BY u.user_id;
-- 2. 查看某个用户的权限详情(替换 {USER_ID} 为实际用户ID
-- 示例查看用户ID=2的权限
SELECT
p.permission_id,
p.user_id,
p.scale_id,
CASE
WHEN p.scale_id > 0 THEN '量表'
WHEN p.scale_id < 0 THEN '问卷'
ELSE '未知'
END as ,
CASE
WHEN p.scale_id > 0 THEN s.scale_name
WHEN p.scale_id < 0 THEN q.questionnaire_name
ELSE NULL
END as ,
p.status,
p.create_time
FROM psy_scale_permission p
LEFT JOIN psy_scale s ON p.scale_id = s.scale_id AND p.scale_id > 0
LEFT JOIN psy_questionnaire q ON p.scale_id = -q.questionnaire_id AND p.scale_id < 0
WHERE p.user_id = 2 -- 替换为实际用户ID
AND p.status = '0'
ORDER BY p.scale_id;
-- 3. 查看所有量表及其权限分配情况
SELECT
s.scale_id,
s.scale_name,
s.status as ,
COUNT(DISTINCT p.user_id) as
FROM psy_scale s
LEFT JOIN psy_scale_permission p ON s.scale_id = p.scale_id AND p.status = '0'
GROUP BY s.scale_id, s.scale_name, s.status
ORDER BY s.scale_id;
-- 4. 查看所有问卷及其权限分配情况
SELECT
q.questionnaire_id,
q.questionnaire_name,
q.status as ,
-q.questionnaire_id as scale_id,
COUNT(DISTINCT p.user_id) as
FROM psy_questionnaire q
LEFT JOIN psy_scale_permission p ON -q.questionnaire_id = p.scale_id AND p.status = '0'
GROUP BY q.questionnaire_id, q.questionnaire_name, q.status
ORDER BY q.questionnaire_id;
-- 5. 检查权限数据一致性(查找孤立的权限记录)
-- 这些权限指向的量表/问卷不存在
SELECT
p.permission_id,
p.user_id,
p.scale_id,
p.create_time,
'权限记录存在但量表/问卷不存在' as
FROM psy_scale_permission p
WHERE p.status = '0'
AND p.scale_id > 0
AND NOT EXISTS (SELECT 1 FROM psy_scale s WHERE s.scale_id = p.scale_id)
UNION ALL
SELECT
p.permission_id,
p.user_id,
p.scale_id,
p.create_time,
'权限记录存在但问卷不存在' as
FROM psy_scale_permission p
WHERE p.status = '0'
AND p.scale_id < 0
AND NOT EXISTS (SELECT 1 FROM psy_questionnaire q WHERE -q.questionnaire_id = p.scale_id);
-- 6. 为指定用户分配所有量表权限(示例)
-- 注意:替换 {USER_ID} 为实际用户ID
/*
INSERT INTO psy_scale_permission (user_id, scale_id, status, create_by, create_time)
SELECT
2 as user_id, -- 替换为实际用户ID
scale_id,
'0',
'admin',
NOW()
FROM psy_scale
WHERE NOT EXISTS (
SELECT 1 FROM psy_scale_permission p
WHERE p.user_id = 2
AND p.scale_id = psy_scale.scale_id
);
*/
-- 7. 为指定用户分配所有问卷权限(示例)
-- 注意使用负数ID
/*
INSERT INTO psy_scale_permission (user_id, scale_id, status, create_by, create_time)
SELECT
2 as user_id, -- 替换为实际用户ID
-questionnaire_id as scale_id,
'0',
'admin',
NOW()
FROM psy_questionnaire
WHERE NOT EXISTS (
SELECT 1 FROM psy_scale_permission p
WHERE p.user_id = 2
AND p.scale_id = -psy_questionnaire.questionnaire_id
);
*/
-- 8. 删除某个用户的所有权限(示例)
/*
DELETE FROM psy_scale_permission
WHERE user_id = 2; -- 替换为实际用户ID
*/
-- 9. 检查特定量表/问卷的权限分配
-- 量表ID=1的权限分配情况
SELECT
u.user_id,
u.user_name,
u.nick_name,
p.status,
p.create_time
FROM psy_scale_permission p
INNER JOIN sys_user u ON p.user_id = u.user_id
WHERE p.scale_id = 1 -- 量表ID
ORDER BY p.create_time DESC;
-- 问卷ID=1的权限分配情况注意使用负数
SELECT
u.user_id,
u.user_name,
u.nick_name,
p.status,
p.create_time
FROM psy_scale_permission p
INNER JOIN sys_user u ON p.user_id = u.user_id
WHERE p.scale_id = -1 -- 问卷ID=1 使用 -1
ORDER BY p.create_time DESC;
-- 10. 快速诊断:查看用户应该能看到什么
-- 替换 {USER_ID} 为实际用户ID
WITH user_permissions AS (
SELECT scale_id
FROM psy_scale_permission
WHERE user_id = 2 -- 替换为实际用户ID
AND status = '0'
)
SELECT
'量表' as ,
s.scale_id,
s.scale_name as ,
s.status as ,
CASE WHEN up.scale_id IS NOT NULL THEN '有权限' ELSE '无权限' END as
FROM psy_scale s
LEFT JOIN user_permissions up ON s.scale_id = up.scale_id
UNION ALL
SELECT
'问卷' as ,
-q.questionnaire_id as scale_id,
q.questionnaire_name as ,
q.status as ,
CASE WHEN up.scale_id IS NOT NULL THEN '有权限' ELSE '无权限' END as
FROM psy_questionnaire q
LEFT JOIN user_permissions up ON -q.questionnaire_id = up.scale_id
ORDER BY , scale_id;