1.0.386.sql 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. -- 1.0.386: 给 UAT_FUNCTION_USER 角色补 sysOrg:list 按钮权限。
  2. --
  3. -- 背景:
  4. -- JwtHandler.CheckAuthorzieAsync 将 /api/sysOrg/list 映射为权限名 sysOrg:list。
  5. -- 非 SuperAdmin 账号需命中「自有按钮权限」才放行;未命中时,只有该路由
  6. -- 未登记为按钮权限才兜底放行。sysOrg:list 已登记(SysMenu Id=1300200030201),
  7. -- 而 UAT_FUNCTION_USER 未授权 → 授权失败,接口返回 code=403
  8. -- 「403 禁止访问,没有权限」(Furion Return200StatusCodes 下 HTTP 仍为 200)。
  9. --
  10. -- S0 页面的公司/工厂下拉统一走 loadOrgList()(Web/src/views/aidop/s0/api/s0SalesApi.ts),
  11. -- 被 27 个 S0 页面共用,每页并发请求 Type=201(公司)与 Type=501(工厂)两次,
  12. -- 故表现为每个 S0 页面弹两个 403,随后下拉为空并提示「部分下拉数据加载失败」。
  13. -- 该角色为租户 UATTEST_CHL 全部 6 个账号的公共角色,影响面为该租户所有用户。
  14. --
  15. -- 最小授权:只补 sysOrg:list 这一条只读权限,不放开 sysOrg:add/update/delete,
  16. -- 也不放开 sysCache / sysConfig / sysFile 等平台管理类权限。
  17. --
  18. -- 生效前提:GetOwnBtnPermList 结果缓存 7 天(CacheConst.KeyUserButton + userId),
  19. -- 当前 CacheType=Memory,重启后端即失效重算。
  20. --
  21. -- 幂等:已授权则不重复插入;角色或菜单不存在的库上为空操作。
  22. DROP TEMPORARY TABLE IF EXISTS tmp_uat_org_list_rm;
  23. CREATE TEMPORARY TABLE tmp_uat_org_list_rm (
  24. seq INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  25. role_id BIGINT NOT NULL,
  26. menu_id BIGINT NOT NULL
  27. );
  28. INSERT INTO tmp_uat_org_list_rm (role_id, menu_id)
  29. SELECT r.Id, m.Id
  30. FROM SysRole r
  31. JOIN SysMenu m
  32. ON m.Type = 3
  33. AND m.Permission = 'sysOrg:list'
  34. AND m.Status = 1
  35. WHERE r.Code = 'UAT_FUNCTION_USER'
  36. AND r.Status = 1
  37. AND EXISTS (
  38. SELECT 1 FROM SysTenantMenu t WHERE t.TenantId = r.TenantId AND t.MenuId = m.Id
  39. )
  40. AND NOT EXISTS (
  41. SELECT 1 FROM SysRoleMenu x WHERE x.RoleId = r.Id AND x.MenuId = m.Id
  42. );
  43. SET @uat_org_list_rm_base := (SELECT IFNULL(MAX(Id), 0) FROM SysRoleMenu);
  44. INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
  45. SELECT @uat_org_list_rm_base + s.seq, s.role_id, s.menu_id
  46. FROM tmp_uat_org_list_rm s;
  47. DROP TEMPORARY TABLE IF EXISTS tmp_uat_org_list_rm;