feat: 配置组织权限和角色管理
根据需求规格说明书3.2角色权限矩阵配置: 1. 创建三级角色体系: - 超级管理员(admin): 全部数据权限,118个菜单 - 分公司用户(branch): 本部门及以下数据权限,23个菜单 - 学校用户(school): 仅本人数据权限,7个菜单 2. 配置部门/组织结构: - 湖北新华书店(总部) - 武汉/黄冈分公司 - 各分公司下属学校 3. 创建示例用户: - wuhan_admin/huanggang_admin: 分公司管理员 - school_wuchang: 学校管理员 4. 新增初始化脚本: sql/init_roles_permissions.sql
This commit is contained in:
parent
b67187f5ab
commit
e0fe5014f2
|
|
@ -0,0 +1,124 @@
|
||||||
|
-- ============================================================
|
||||||
|
-- 盘古用户平台 - 角色与权限初始化脚本
|
||||||
|
-- 根据需求规格说明书 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;
|
||||||
Loading…
Reference in New Issue