181 lines
5.1 KiB
SQL
181 lines
5.1 KiB
SQL
-- ========================================
|
||
-- 权限数据检查 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;
|