27 lines
1.1 KiB
SQL
27 lines
1.1 KiB
SQL
CREATE TEMPORARY TABLE `tmp_agent_role_source_map` AS
|
|
SELECT `tenant_id`, `dept_id`, MIN(`role_id`) AS `source_role_id`
|
|
FROM `sys_role`
|
|
WHERE `is_pass` = 1 AND `deleted_at` IS NULL
|
|
GROUP BY `tenant_id`, `dept_id`
|
|
HAVING COUNT(*) = 1;
|
|
|
|
UPDATE `sys_role` AS `child_role`
|
|
JOIN `sys_dept` AS `child_dept`
|
|
ON `child_dept`.`dept_id` = `child_role`.`dept_id`
|
|
AND `child_dept`.`tenant_id` = `child_role`.`tenant_id`
|
|
AND `child_dept`.`dept_role` = `child_role`.`role_id`
|
|
AND `child_dept`.`dept_type` = 1
|
|
JOIN `tmp_agent_role_source_map` AS `source_map`
|
|
ON `source_map`.`tenant_id` = `child_dept`.`tenant_id`
|
|
AND `source_map`.`dept_id` = `child_dept`.`parent_id`
|
|
JOIN `sys_role` AS `source_role` ON `source_role`.`role_id` = `source_map`.`source_role_id`
|
|
SET
|
|
`child_role`.`source_role_id` = `source_role`.`role_id`,
|
|
`child_role`.`source_dept_id` = `source_role`.`dept_id`
|
|
WHERE `child_role`.`source_role_id` = 0
|
|
AND `child_role`.`created_dept` = `source_role`.`dept_id`
|
|
AND `child_role`.`role_key` = `source_role`.`role_key`
|
|
AND `child_role`.`deleted_at` IS NULL;
|
|
|
|
DROP TEMPORARY TABLE `tmp_agent_role_source_map`;
|