From e0fe5014f25a4893ab056ba454401c30d84dccf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Sun, 1 Feb 2026 13:56:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=85=8D=E7=BD=AE=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=92=8C=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据需求规格说明书3.2角色权限矩阵配置: 1. 创建三级角色体系: - 超级管理员(admin): 全部数据权限,118个菜单 - 分公司用户(branch): 本部门及以下数据权限,23个菜单 - 学校用户(school): 仅本人数据权限,7个菜单 2. 配置部门/组织结构: - 湖北新华书店(总部) - 武汉/黄冈分公司 - 各分公司下属学校 3. 创建示例用户: - wuhan_admin/huanggang_admin: 分公司管理员 - school_wuchang: 学校管理员 4. 新增初始化脚本: sql/init_roles_permissions.sql --- sql/init_roles_permissions.sql | 124 +++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 sql/init_roles_permissions.sql diff --git a/sql/init_roles_permissions.sql b/sql/init_roles_permissions.sql new file mode 100644 index 0000000..47adb3d --- /dev/null +++ b/sql/init_roles_permissions.sql @@ -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;