Permission names are <resource>:<action>; permissions come from plugin code #58
Reference in New Issue
Block a user
Delete Branch "permission-naming"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Permission names now follow
<resource>:<action>everywhere, and the rule is enforced by the host at plugin discovery — a plugin gating on, or declaring, a badly-shaped name stops the boot like any other bad manifest. So it holds for every installed plugin, not just ones the admin GUI touches.The catch-all
adminpermission is gone. Each admin screen is its own resource —users,groups,oauth2-clients— split into:readand:write, so a helpdesk account can holdusers:readalone. That split is modelled in the UI, not just the gate: a read-only holder sees no create/save/delete affordance anywhere, and the Admin nav filters per screen (hold none of the three and the section disappears).The Permissions screen is deleted. Permission names are declared in plugin code, so the host collects them into one catalog (
ctx.declaredPermissions) and that fixed list is what the Users and Groups screens offer as a checkbox picker. The submitted set is the desired state; a crafted POST cannot grant an undeclared name, and a grant left behind by an uninstalled plugin is never silently revoked by an unrelated save.Guards worth naming: you cannot revoke your own grants; a permission held through a group renders ticked-but-disabled rather than unticked (showing it unticked stated the opposite of the truth); and deleting a group now revokes the permissions it granted, instead of orphaning them to resurrect under a re-created name.
Two pre-existing bugs fixed on the way: the permission path validator was the group name regex with no colon, so
/admin/permissions/scheduling:readalready 404'd; andbootstrapnever bind-mountedplugins/, so a dropped-in plugin's permissions were never seeded — the quick start now saysdocker compose up -d, which re-runs the one-shot.Delivers both the permission-format and the permissions-as-a-list todos. Reviewed by systems-architect (3 rounds), product-owner-reviewer, and stability-reviewer (2 rounds); decisions recorded in AGENTS.md and README, deferred items in todo.md.
WIP: Permission names are <resource>:<action>, replacing the catch-all admin permissionto Permission names are <resource>:<action>; permissions come from plugin coded626b3ae74to1f0956dd58