-- 1.0.386: 给 UAT_FUNCTION_USER 角色补 sysOrg:list 按钮权限。
--
-- 背景：
--   JwtHandler.CheckAuthorzieAsync 将 /api/sysOrg/list 映射为权限名 sysOrg:list。
--   非 SuperAdmin 账号需命中「自有按钮权限」才放行；未命中时，只有该路由
--   未登记为按钮权限才兜底放行。sysOrg:list 已登记（SysMenu Id=1300200030201），
--   而 UAT_FUNCTION_USER 未授权 → 授权失败，接口返回 code=403
--   「403 禁止访问，没有权限」（Furion Return200StatusCodes 下 HTTP 仍为 200）。
--
--   S0 页面的公司/工厂下拉统一走 loadOrgList()（Web/src/views/aidop/s0/api/s0SalesApi.ts），
--   被 27 个 S0 页面共用，每页并发请求 Type=201（公司）与 Type=501（工厂）两次，
--   故表现为每个 S0 页面弹两个 403，随后下拉为空并提示「部分下拉数据加载失败」。
--   该角色为租户 UATTEST_CHL 全部 6 个账号的公共角色，影响面为该租户所有用户。
--
-- 最小授权：只补 sysOrg:list 这一条只读权限，不放开 sysOrg:add/update/delete，
--   也不放开 sysCache / sysConfig / sysFile 等平台管理类权限。
--
-- 生效前提：GetOwnBtnPermList 结果缓存 7 天（CacheConst.KeyUserButton + userId），
--   当前 CacheType=Memory，重启后端即失效重算。
--
-- 幂等：已授权则不重复插入；角色或菜单不存在的库上为空操作。

DROP TEMPORARY TABLE IF EXISTS tmp_uat_org_list_rm;
CREATE TEMPORARY TABLE tmp_uat_org_list_rm (
  seq INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  role_id BIGINT NOT NULL,
  menu_id BIGINT NOT NULL
);

INSERT INTO tmp_uat_org_list_rm (role_id, menu_id)
SELECT r.Id, m.Id
FROM SysRole r
JOIN SysMenu m
  ON m.Type = 3
 AND m.Permission = 'sysOrg:list'
 AND m.Status = 1
WHERE r.Code = 'UAT_FUNCTION_USER'
  AND r.Status = 1
  AND EXISTS (
    SELECT 1 FROM SysTenantMenu t WHERE t.TenantId = r.TenantId AND t.MenuId = m.Id
  )
  AND NOT EXISTS (
    SELECT 1 FROM SysRoleMenu x WHERE x.RoleId = r.Id AND x.MenuId = m.Id
  );

SET @uat_org_list_rm_base := (SELECT IFNULL(MAX(Id), 0) FROM SysRoleMenu);

INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
SELECT @uat_org_list_rm_base + s.seq, s.role_id, s.menu_id
FROM tmp_uat_org_list_rm s;

DROP TEMPORARY TABLE IF EXISTS tmp_uat_org_list_rm;
