Files
KCGL/db_migrations/fix_missing_operation_permissions.sql

71 lines
4.1 KiB
PL/PgSQL

-- ============================================================
-- 补齐缺失的 :operation 操作权限 & 字段权限
-- 创建日期: 2026-07-17
-- 说明: 前端按钮使用 hasPermission('xxx:operation') 控制显示
-- 但 sys_element 中缺少对应的元素权限码,导致:
-- 1. 审批按钮可见但 can_approve 拒绝(出库/借库审批)
-- 2. 用户管理操作按钮不显示
-- 3. 权限分配按钮不显示
-- 4. 密码字段被隐藏
-- ============================================================
BEGIN;
-- ===== 1. 出库审批操作权限 =====
INSERT INTO sys_element (menu_code, name, code, element_type)
SELECT 'outbound_approval', '审批操作', 'outbound_approval:operation', 'column'
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'outbound_approval:operation');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPERVISOR', 'outbound_approval:operation', 'element'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'outbound_approval:operation');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPER_ADMIN', 'outbound_approval:operation', 'element'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPER_ADMIN' AND target_code = 'outbound_approval:operation');
-- ===== 2. 借库审批操作权限 =====
INSERT INTO sys_element (menu_code, name, code, element_type)
SELECT 'op_borrow_approval', '审批操作', 'op_borrow_approval:operation', 'column'
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'op_borrow_approval:operation');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT role_code, 'op_borrow_approval:operation', 'element'
FROM (SELECT DISTINCT role_code FROM sys_role_permission WHERE target_code = 'op_borrow_approval') t
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = t.role_code AND target_code = 'op_borrow_approval:operation');
-- ===== 3. 用户管理操作权限 =====
INSERT INTO sys_element (menu_code, name, code, element_type)
SELECT 'system_user', '用户操作', 'system_user:operation', 'column'
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'system_user:operation');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPERVISOR', 'system_user:operation', 'element'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'system_user:operation');
-- ===== 4. 权限分配操作权限 =====
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPERVISOR', 'system_permission:operation', 'element'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'system_permission:operation');
-- ===== 5. 密码管理字段权限 =====
INSERT INTO sys_element (menu_code, name, code, element_type)
SELECT 'system_user', '密码管理', 'system_user:password', 'column'
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'system_user:password');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPER_ADMIN', 'system_user:password', 'element'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPER_ADMIN' AND target_code = 'system_user:password');
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPERVISOR', 'system_user:password', 'element'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_permission WHERE role_code = 'SUPERVISOR' AND target_code = 'system_user:password');
-- 验证
SELECT 'outbound_approval:operation' AS perm, count(*) FROM sys_role_permission WHERE target_code = 'outbound_approval:operation'
UNION ALL SELECT 'op_borrow_approval:operation', count(*) FROM sys_role_permission WHERE target_code = 'op_borrow_approval:operation'
UNION ALL SELECT 'system_user:operation', count(*) FROM sys_role_permission WHERE target_code = 'system_user:operation'
UNION ALL SELECT 'system_permission:operation', count(*) FROM sys_role_permission WHERE target_code = 'system_permission:operation'
UNION ALL SELECT 'system_user:password', count(*) FROM sys_role_permission WHERE target_code = 'system_user:password';
COMMIT;