-- 审批参与权限授予种子(可重复执行) -- 目标库:gxtyzx_core(server) -- 执行顺序:01-approval.sql -> 02-approval_menu.sql -> 03-approval_orgs_roles.sql -> 04-approval_role_grants.sql -- -- 背景(#45):审批动作的 @PreAuthorize 按 #14 动作矩阵要求 approval:instance:approve, -- 而报送人/被派单人是一般员工——参与审批的权限由角色授予承载,接口鉴权不放宽。 -- -- 授予矩阵: -- approval_staff(员工,本文件新建)与既有岗位角色 -- dept_leader_*、dept_deputy_*、approval_archivist、approval_cashier、 -- approval_typist、approval_issuer、approval_general_manager -- -> 页面 /approval、/approval/todo、/approval/instance -- -> approval:instance:list、submit、approve -- approval_archivist 额外 -> approval:instance:archive(收文员归档) -- assign、export 仍仅 superAdmin(02-approval_menu.sql 已授) -- -- 成员分配(把 approval_staff 发给员工)由客户在后台完成,同 03 的约定。 -- 按 tenant_id=10150 执行;换租户时改下面的 @tenant_id。 SET @tenant_id := 10150; -- 1. 员工基础角色 INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) SELECT '员工', 'approval_staff', '审批种子:内部员工基础角色,提交/审批/确认自己的单据(#45)', 900, @tenant_id, 0 FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 AND role_code = 'approval_staff' ); -- 2. 参与人角色:页面 + list/submit/approve INSERT INTO sys_role_menu (role_id, menu_id, tenant_id) SELECT r.role_id, m.menu_id, @tenant_id FROM sys_role r JOIN sys_menu m ON m.tenant_id = @tenant_id AND m.deleted = 0 AND (m.path IN ('/approval', '/approval/todo', '/approval/instance') OR m.authority IN ('approval:instance:list', 'approval:instance:submit', 'approval:instance:approve')) WHERE r.tenant_id = @tenant_id AND r.deleted = 0 AND (r.role_code = 'approval_staff' OR LEFT(r.role_code, 12) = 'dept_leader_' OR LEFT(r.role_code, 12) = 'dept_deputy_' OR r.role_code IN ('approval_archivist', 'approval_cashier', 'approval_typist', 'approval_issuer', 'approval_general_manager')) AND NOT EXISTS ( SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id ); -- 3. 收文员追加归档权限 INSERT INTO sys_role_menu (role_id, menu_id, tenant_id) SELECT r.role_id, m.menu_id, @tenant_id FROM sys_role r JOIN sys_menu m ON m.tenant_id = @tenant_id AND m.deleted = 0 AND m.authority = 'approval:instance:archive' WHERE r.tenant_id = @tenant_id AND r.deleted = 0 AND r.role_code = 'approval_archivist' AND NOT EXISTS ( SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id ); -- 4. 相关部门(体验券领用申请单固定角色,ADR 0013;待客户确认) INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) SELECT '相关部门', 'approval_related_dept', '审批种子:体验券领用申请单「相关部门」节点,多人或签(ADR 0013)', 926, @tenant_id, 0 FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 AND role_code = 'approval_related_dept' ); INSERT INTO sys_role_menu (role_id, menu_id, tenant_id) SELECT r.role_id, m.menu_id, @tenant_id FROM sys_role r JOIN sys_menu m ON m.tenant_id = @tenant_id AND m.deleted = 0 AND (m.path IN ('/approval', '/approval/todo', '/approval/instance') OR m.authority IN ('approval:instance:list', 'approval:instance:submit', 'approval:instance:approve')) WHERE r.tenant_id = @tenant_id AND r.deleted = 0 AND r.role_code = 'approval_related_dept' AND NOT EXISTS ( SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id ); -- 5. 价格表查看:全体员工可查当前生效与历史版本(ADR 0008) INSERT INTO sys_role_menu (role_id, menu_id, tenant_id) SELECT r.role_id, m.menu_id, @tenant_id FROM sys_role r JOIN sys_menu m ON m.tenant_id = @tenant_id AND m.deleted = 0 AND (m.path = '/approval/price' OR m.authority = 'approval:price:view') WHERE r.tenant_id = @tenant_id AND r.deleted = 0 AND (r.role_code = 'approval_staff' OR LEFT(r.role_code, 12) = 'dept_leader_' OR LEFT(r.role_code, 12) = 'dept_deputy_' OR r.role_code IN ('approval_archivist', 'approval_cashier', 'approval_typist', 'approval_issuer', 'approval_general_manager', 'approval_related_dept')) AND NOT EXISTS ( SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id );