| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- -- 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;
|