125 lines
6.2 KiB
SQL
125 lines
6.2 KiB
SQL
-- ============================================================
|
||
-- 盘古用户平台 - 角色与权限初始化脚本
|
||
-- 根据需求规格说明书 3.2 角色权限矩阵配置
|
||
-- 作者:pangu
|
||
-- 创建时间:2026-02-01
|
||
-- ============================================================
|
||
|
||
-- 1. 创建角色
|
||
-- -----------------------------------------------------------
|
||
-- 删除旧的非必要角色(保留超级管理员)
|
||
DELETE FROM sys_role WHERE role_id > 1;
|
||
|
||
-- 插入三个角色
|
||
INSERT INTO sys_role (role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, remark) VALUES
|
||
(1, '超级管理员', 'admin', 1, '1', 1, 1, '0', '0', 'admin', NOW(), '系统最高权限,管理全部数据'),
|
||
(2, '分公司用户', 'branch', 2, '4', 1, 1, '0', '0', 'admin', NOW(), '管理所属区域数据(本部门及以下)'),
|
||
(3, '学校用户', 'school', 3, '5', 1, 1, '0', '0', 'admin', NOW(), '管理本校数据(仅本人数据权限)')
|
||
ON DUPLICATE KEY UPDATE
|
||
role_name = VALUES(role_name),
|
||
role_key = VALUES(role_key),
|
||
data_scope = VALUES(data_scope),
|
||
remark = VALUES(remark);
|
||
|
||
-- 2. 配置部门结构(按需求调整为分公司-学校结构)
|
||
-- -----------------------------------------------------------
|
||
-- 清空旧部门数据
|
||
DELETE FROM sys_dept WHERE dept_id > 100;
|
||
|
||
-- 重新配置部门结构
|
||
UPDATE sys_dept SET dept_name = '湖北新华书店', ancestors = '0', order_num = 0 WHERE dept_id = 100;
|
||
|
||
-- 插入分公司和学校
|
||
INSERT INTO sys_dept (dept_id, parent_id, ancestors, dept_name, order_num, leader, phone, email, status, del_flag, create_by, create_time) VALUES
|
||
-- 武汉分公司
|
||
(101, 100, '0,100', '武汉分公司', 1, '', '', '', '0', '0', 'admin', NOW()),
|
||
-- 武汉分公司下的学校
|
||
(1011, 101, '0,100,101', '武昌实验小学', 1, '', '', '', '0', '0', 'admin', NOW()),
|
||
(1012, 101, '0,100,101', '武汉市第一中学', 2, '', '', '', '0', '0', 'admin', NOW()),
|
||
(1013, 101, '0,100,101', '水果湖小学', 3, '', '', '', '0', '0', 'admin', NOW()),
|
||
-- 黄冈分公司
|
||
(102, 100, '0,100', '黄冈分公司', 2, '', '', '', '0', '0', 'admin', NOW()),
|
||
-- 黄冈分公司下的学校
|
||
(1021, 102, '0,100,102', '黄冈中学', 1, '', '', '', '0', '0', 'admin', NOW()),
|
||
(1022, 102, '0,100,102', '红安一中', 2, '', '', '', '0', '0', 'admin', NOW())
|
||
ON DUPLICATE KEY UPDATE dept_name = VALUES(dept_name), ancestors = VALUES(ancestors);
|
||
|
||
-- 3. 配置角色菜单权限
|
||
-- -----------------------------------------------------------
|
||
-- 先清空角色菜单关联
|
||
DELETE FROM sys_role_menu WHERE role_id IN (2, 3);
|
||
|
||
-- 超级管理员拥有所有权限(已在之前配置)
|
||
|
||
-- 分公司用户权限(根据需求3.2权限矩阵)
|
||
-- 可访问:学校管理、会员管理、学生管理、基础数据(年级/班级/学科)
|
||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||
SELECT 2, menu_id FROM sys_menu WHERE
|
||
menu_name IN ('学校管理', '会员管理', '学生管理', '基础数据', '年级管理', '班级管理', '学科管理')
|
||
OR path IN ('/school', '/member', '/student', '/base', '/base/grade', '/base/class', '/base/subject')
|
||
OR parent_id IN (
|
||
SELECT menu_id FROM sys_menu WHERE menu_name IN ('学校管理', '会员管理', '学生管理', '基础数据')
|
||
);
|
||
|
||
-- 学校用户权限(根据需求3.2权限矩阵)
|
||
-- 可访问:学生管理(本校)、教师管理(本校)
|
||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||
SELECT 3, menu_id FROM sys_menu WHERE
|
||
menu_name IN ('学生管理')
|
||
OR path IN ('/student')
|
||
OR parent_id IN (
|
||
SELECT menu_id FROM sys_menu WHERE menu_name = '学生管理'
|
||
);
|
||
|
||
-- 4. 创建示例用户
|
||
-- -----------------------------------------------------------
|
||
-- 确保admin用户存在并关联超级管理员角色
|
||
UPDATE sys_user SET dept_id = 100 WHERE user_id = 1;
|
||
|
||
-- 创建分公司用户示例
|
||
INSERT INTO sys_user (user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, remark) VALUES
|
||
(3, 101, 'wuhan_admin', '武汉分公司管理员', '00', 'wuhan@xinhua.com', '13800000001', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '', NULL, 'admin', NOW(), '武汉分公司管理员账号'),
|
||
(4, 102, 'huanggang_admin', '黄冈分公司管理员', '00', 'huanggang@xinhua.com', '13800000002', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '', NULL, 'admin', NOW(), '黄冈分公司管理员账号'),
|
||
(5, 1011, 'school_wuchang', '武昌实验小学管理员', '00', 'wuchang@school.com', '13800000003', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '', NULL, 'admin', NOW(), '学校用户账号')
|
||
ON DUPLICATE KEY UPDATE nick_name = VALUES(nick_name), dept_id = VALUES(dept_id);
|
||
|
||
-- 5. 配置用户角色关联
|
||
-- -----------------------------------------------------------
|
||
DELETE FROM sys_user_role WHERE user_id IN (3, 4, 5);
|
||
|
||
INSERT INTO sys_user_role (user_id, role_id) VALUES
|
||
(1, 1), -- admin -> 超级管理员
|
||
(3, 2), -- wuhan_admin -> 分公司用户
|
||
(4, 2), -- huanggang_admin -> 分公司用户
|
||
(5, 3) -- school_wuchang -> 学校用户
|
||
ON DUPLICATE KEY UPDATE role_id = VALUES(role_id);
|
||
|
||
-- 6. 验证配置
|
||
-- -----------------------------------------------------------
|
||
SELECT '=== 角色配置 ===' AS info;
|
||
SELECT role_id, role_name, role_key, data_scope, remark FROM sys_role ORDER BY role_id;
|
||
|
||
SELECT '=== 部门结构 ===' AS info;
|
||
SELECT dept_id, parent_id, dept_name,
|
||
CASE
|
||
WHEN parent_id = 0 THEN '总部'
|
||
WHEN parent_id = 100 THEN '分公司'
|
||
ELSE '学校'
|
||
END as dept_type
|
||
FROM sys_dept WHERE del_flag = '0' ORDER BY parent_id, order_num;
|
||
|
||
SELECT '=== 用户角色 ===' AS info;
|
||
SELECT u.user_name, u.nick_name, d.dept_name, r.role_name
|
||
FROM sys_user u
|
||
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
|
||
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id
|
||
LEFT JOIN sys_role r ON ur.role_id = r.role_id
|
||
WHERE u.del_flag = '0'
|
||
ORDER BY u.user_id;
|
||
|
||
SELECT '=== 角色权限数量 ===' AS info;
|
||
SELECT r.role_name, COUNT(rm.menu_id) as menu_count
|
||
FROM sys_role r
|
||
LEFT JOIN sys_role_menu rm ON r.role_id = rm.role_id
|
||
GROUP BY r.role_id, r.role_name;
|