diff --git a/packages/gateway/public/admin.html b/packages/gateway/public/admin.html index a25bcb1..9dd47ba 100644 --- a/packages/gateway/public/admin.html +++ b/packages/gateway/public/admin.html @@ -89,6 +89,7 @@
A set is a reusable list of rules — server · category · tier → ceiling. Assign it to a role as + granted (live now) or self-service (the user may switch it on from their own page). + A role with no granted set keeps using the grants matrix on the Roles tab; the first granted set makes that role closed-world — + anything no rule covers is denied.
+ ${sets.length ? `| Set | Rules | Assigned to | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| ${esc(s.name)}${s.scope === "role" ? ' role-private' : ""}
+ ${s.description ? ` ${esc(s.description)} ` : ""} |
+ ${s.ruleCount} | +${s.assignedTo.length
+ ? s.assignedTo.map(a => `${esc(a.roleName)} ${modePill(a.mode)}`).join(" ") + : 'nobody'} |
+ + + + | +||||||||
+ ${rulesFor.length ? `
No rules yet — this set grants nothing. '} +
+
+
+
+
+
+
+ Ceiling | |||||||||||
No sets yet.
'} +Assigning previews itself first: you see how many tools the role gains and loses, with examples, before anything is written.
+| Role | World | Assign |
|---|---|---|
| ${esc(r.name)} ${r.isAdmin ? 'admin' : ""}
+ ${mine.length
+ ? mine.map(s => {
+ const a = s.assignedTo.find(x => x.roleId === r.id);
+ return `${esc(s.name)} ${modePill(a.mode)} remove`;
+ }).join(" ") + : 'no sets — legacy grants apply'} |
+ ${granted.length ? "closed" : "open (grants matrix)"} | ++ + + + + | +