新增权限:实现教师学员身份绑定与自服务安全控制
This commit is contained in:
1 parent
35832f2fce
commit
592a9655e8
38 files changed
+3277
-89
No files matched your search
@@ -46,16 +46,14 @@ RuoYi-Vue/sql/system/kingbase/
|
||||
ALTER TABLE train_teacher ADD COLUMN IF NOT EXISTS user_id BIGINT;
|
||||
ALTER TABLE train_student ADD COLUMN IF NOT EXISTS user_id BIGINT;
|
||||
|
||||
-- 2. 建立教师账号唯一索引 (忽略已删除 del_flag='2' 与空值)
|
||||
DROP INDEX IF EXISTS uq_train_teacher_user_id;
|
||||
CREATE UNIQUE INDEX uq_train_teacher_user_id
|
||||
ON train_teacher(user_id)
|
||||
-- 2. 建立教师账号唯一索引 (无 DROP,安全幂等,忽略已删除 del_flag='2' 与空值)
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_train_teacher_user_id
|
||||
ON train_teacher(user_id)
|
||||
WHERE user_id IS NOT NULL AND del_flag = '0';
|
||||
|
||||
-- 3. 建立学员账号唯一索引
|
||||
DROP INDEX IF EXISTS uq_train_student_user_id;
|
||||
CREATE UNIQUE INDEX uq_train_student_user_id
|
||||
ON train_student(user_id)
|
||||
-- 3. 建立学员账号唯一索引 (无 DROP,安全幂等)
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_train_student_user_id
|
||||
ON train_student(user_id)
|
||||
WHERE user_id IS NOT NULL AND del_flag = '0';
|
||||
|
||||
COMMENT ON COLUMN train_teacher.user_id IS '关联sys_user.user_id (唯一绑定教师登录账号)';
|
||||
@@ -66,26 +64,27 @@ RuoYi-Vue/sql/system/kingbase/
|
||||
|
||||
### 2.2 脚本 2: `005_training_roles_permissions.sql`
|
||||
- **执行目标**:
|
||||
1. 预置 3 个业务角色 (`train_admin`, `train_teacher`, `train_student`) 写入 `sys_role`。
|
||||
2. 补齐 `sys_menu` 中历史遗漏的基础模块按钮级权限(`train:teacher:*`, `train:student:*`, `train:course:*`, `train:plan:*`, `train:lesson:*` 等)。
|
||||
3. 将 `system:board:*` 权限标识收敛对齐为 `train:board:*`。
|
||||
4. 插入 Teacher 工作台菜单与 Student 个人中心菜单节点。
|
||||
5. 幂等配置 `sys_role_menu` 角色菜单权限映射。
|
||||
1. 内置 ID Collision Guard:预检 `role_id (3,4,5)` 与 `menu_id (2201..2240)`,若已被外部其他业务资源占用则显式 ABORT,严禁覆盖外来记录。
|
||||
2. 预置 3 个业务角色 (`train_admin`, `train_teacher`, `train_student`) 写入 `sys_role`。
|
||||
3. 补齐 `sys_menu` 中历史遗漏的基础模块按钮级权限(`train:teacher:*`, `train:student:*`, `train:course:*`, `train:plan:*`, `train:lesson:*` 等)。
|
||||
4. 将 `system:board:*` 权限标识收敛对齐为 `train:board:*`。
|
||||
5. 插入 Teacher 工作台菜单与 Student 个人中心菜单节点。
|
||||
6. 幂等配置 `sys_role_menu` 角色菜单权限映射。
|
||||
- **DML 设计核心内容**:
|
||||
```sql
|
||||
BEGIN;
|
||||
|
||||
-- 1. 预置角色 (使用特定固定 role_id 3, 4, 5,采用 ON CONFLICT DO NOTHING 保证幂等)
|
||||
-- 0. ID 碰撞守卫 (Collision Guard):检测 role_id 与 menu_id 是否有非预期占用,有则 RAISE EXCEPTION
|
||||
DO $$ ... $$;
|
||||
|
||||
-- 1. 预置角色 (使用 WHERE NOT EXISTS 确保无重复)
|
||||
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
|
||||
(3, '培训管理员', 'train_admin', 3, '1', 1, 1, '0', '0', 'admin', CURRENT_TIMESTAMP, '一期业务全局管理角色'),
|
||||
(4, '培训教师', 'train_teacher', 4, '2', 1, 1, '0', '0', 'admin', CURRENT_TIMESTAMP, '教师专属教学工作台'),
|
||||
(5, '培训学员', 'train_student', 5, '2', 1, 1, '0', '0', 'admin', CURRENT_TIMESTAMP, '学员专属个人培训中心')
|
||||
ON CONFLICT (role_id) DO NOTHING;
|
||||
SELECT 3, '培训管理员', 'train_admin', 3, '1', 1, 1, '0', '0', 'admin', CURRENT_TIMESTAMP, '', NULL, '一期业务全局管理角色'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_id = 3 OR role_key = 'train_admin');
|
||||
|
||||
-- 2. 补齐基础管理模块按钮权限 (示例:教师管理按钮)
|
||||
-- 采用 WHERE NOT EXISTS 确保多次执行安全幂等
|
||||
-- ... (录入 train:teacher:list/add/edit/query/export 等节点)
|
||||
-- ... (录入 train:teacher:list/add/edit/query 等节点)
|
||||
|
||||
-- 3. 统一规范电子班牌命名空间
|
||||
UPDATE sys_menu SET perms = REPLACE(perms, 'system:board:', 'train:board:')
|
||||
@@ -93,8 +92,8 @@ RuoYi-Vue/sql/system/kingbase/
|
||||
|
||||
-- 4. 建立角色与菜单权限关联 (sys_role_menu)
|
||||
-- train_admin: 分配全部培训业务管理菜单及按钮
|
||||
-- train_teacher: 分配教师工作台、我的课表、我的班级学员菜单
|
||||
-- train_student: 分配学员中心、我的课表、我的报到、我的考勤菜单
|
||||
-- train_teacher: 分配教师工作台与专属自服务权限
|
||||
-- train_student: 分配学员培训中心与专属自服务权限
|
||||
|
||||
COMMIT;
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user