fix(ui): 「系统管理」分区改为仅 admin 注册(普通用户不再看到该栏)
- apply() 先异步判 /api/auth/me 角色,非 admin 不注入该 section(fail-closed)
- 依据:官方 settings 外壳按 ctx.slots.getVersion('settings.section') 重算导航
(dsh-client-ui-settings/lib/client.js:560)⇒ 晚注册会被正确反映
- 验收脚本补「非 admin 只注册 1 个分区」断言 + 等一拍异步注册;npm run verify 全绿
- 版本 0.3.1 → 0.3.2,已铺发
This commit is contained in:
1 parent
4190848c4a
commit
ac67db7702
3 files changed
+39
-13
No files matched your search
@@ -67,6 +67,8 @@ function dICT_zh(d) { return d.zh || {}; }
|
||||
const inj = Array.isArray(mod.inject) ? mod.inject : [];
|
||||
console.log(" inject 声明:", JSON.stringify(inj));
|
||||
mod.apply(ctx);
|
||||
// ⚠️ apply 里「仅 admin 注册」是**异步**的(先 fetch /api/auth/me 判角色)⇒ 必须等一拍
|
||||
await new Promise((r) => setTimeout(r, 80));
|
||||
console.log(" 已注册 section:", regs.map(r => r.meta.id + " / order=" + r.meta.order + " / label=" + r.meta.label()).join(" | "));
|
||||
|
||||
function text(n, out = [], depth = 0) {
|
||||
@@ -98,7 +100,9 @@ for (const { meta, Comp } of regs.filter(r => r.meta.id === "platform-admin")) {
|
||||
}
|
||||
}
|
||||
|
||||
ok("注册了两个 settings.section", regs.length === 2, "-> " + regs.map(r => r.meta.id).join(", "));
|
||||
// 注:apply 里「仅 admin 注册」是异步判角色后才 inject;本脚本打桩的是同步路径,
|
||||
// 因此这里断言「两个分区都可注册」+ 内容层门禁。注册条件由 R2 的运行时口径另验。
|
||||
ok("admin 视角下注册了两个 settings.section", regs.length === 2, "-> " + regs.map(r => r.meta.id).join(", "));
|
||||
const pa = regs.find(r => r.meta.id === "platform-admin");
|
||||
ok("存在 platform-admin 分区", !!pa);
|
||||
if (pa) ok("其 order = 102", pa.meta.order === 102);
|
||||
@@ -111,5 +115,15 @@ ROLE = "active";
|
||||
const tUser = text(await render(pa.Comp)).join(" | ");
|
||||
ok("非 admin:被门禁挡住", tUser.includes("仅对管理员显示"));
|
||||
ok("非 admin:不出现任何管理项", !["候选池","运行时"].some(k => tUser.includes(k)));
|
||||
// ── 关键:**非 admin 时「系统管理」压根不注册**(2026-09-13 用户指出普通用户不该看到这一栏)
|
||||
{
|
||||
regs = []; ROLE = "active";
|
||||
mod.apply(ctx);
|
||||
await new Promise((r) => setTimeout(r, 80));
|
||||
ok("非 admin 视角下只注册 1 个分区(不含系统管理)",
|
||||
regs.length === 1 && regs[0].meta.id === "business-plugins",
|
||||
"-> " + regs.map(r => r.meta.id).join(", "));
|
||||
regs = []; ROLE = "admin";
|
||||
}
|
||||
console.log(failed === 0 ? "\n结论:全绿 ✅" : "\n结论:有 " + failed + " 项失败 ❌");
|
||||
process.exit(failed === 0 ? 0 : 1);
|
||||
Reference in new issue
Block a user