xinli/检查权限数据.sql
2025-12-02 15:12:55 +08:00

181 lines
5.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ========================================
-- 权限数据检查 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;