Permissions are a fixed list from plugin code; grant them on Users and Groups

This commit is contained in:
2026-08-05 14:29:15 +02:00
parent fb4382be9d
commit 29d654c012
35 changed files with 431 additions and 873 deletions
+8 -19
View File
@@ -8,9 +8,8 @@
import { definePlugin, type HttpMethod, type Route, type RouteHandler } from "#plugin-api";
import { clientsCreate, clientsDeleteConfirm, clientsDelete, clientsDetail, clientsList, clientsNewForm } from "./admin-clients.ts";
import { groupsAddMember, groupsCreate, groupsDelete, groupsDeleteConfirm, groupsDetail, groupsList, groupsNewForm, groupsRemoveMember } from "./admin-groups.ts";
import { rolesAddMember, rolesCreate, rolesDelete, rolesDeleteConfirm, rolesDetail, rolesList, rolesNewForm, rolesRemoveMember } from "./admin-permissions.ts";
import { usersCreate, usersDeleteConfirm, usersDelete, usersEditForm, usersList, usersNewForm, usersRecovery, usersState, usersUpdate } from "./admin-users.ts";
import { groupsAddMember, groupsCreate, groupsDelete, groupsDeleteConfirm, groupsDetail, groupsList, groupsNewForm, groupsPermissions, groupsRemoveMember } from "./admin-groups.ts";
import { usersCreate, usersDeleteConfirm, usersDelete, usersEditForm, usersList, usersNewForm, usersPermissions, usersRecovery, usersState, usersUpdate } from "./admin-users.ts";
import { ADMIN_NAV, actionForMethod, type AdminResource, permissionName } from "./admin-shared.ts";
// One route factory per screen: a GET gates on `<resource>:read` and a POST on `<resource>:write`,
@@ -23,7 +22,6 @@ const on = (resource: AdminResource) => (method: HttpMethod, path: string, handl
const users = on("users");
const groups = on("groups");
const permissions = on("permissions");
const clients = on("oauth2-clients");
export default definePlugin({
@@ -32,12 +30,10 @@ export default definePlugin({
nav: [ADMIN_NAV],
permissions: [
{ description: "View users", name: "users:read" },
{ description: "Create, edit and delete users", name: "users:write" },
{ description: "View groups and their members", name: "groups:read" },
{ description: "Create, delete and change the membership of groups", name: "groups:write" },
{ description: "View permissions and who holds them", name: "permissions:read" },
{ description: "Create, delete and grant permissions", name: "permissions:write" },
{ description: "View users and the permissions they hold", name: "users:read" },
{ description: "Create, edit and delete users, and grant them permissions", name: "users:write" },
{ description: "View groups, their members and the permissions they hold", name: "groups:read" },
{ description: "Create and delete groups, and change their members and permissions", name: "groups:write" },
{ description: "View OAuth2 clients", name: "oauth2-clients:read" },
{ description: "Register and delete OAuth2 clients", name: "oauth2-clients:write" },
],
@@ -53,6 +49,7 @@ export default definePlugin({
users("GET", "/users/:id/delete", usersDeleteConfirm),
users("POST", "/users/:id/delete", usersDelete),
users("POST", "/users/:id/recovery", usersRecovery),
users("POST", "/users/:id/permissions", usersPermissions),
// Groups
groups("GET", "/groups", groupsList),
groups("POST", "/groups", groupsCreate),
@@ -62,15 +59,7 @@ export default definePlugin({
groups("GET", "/groups/:name/delete", groupsDeleteConfirm),
groups("POST", "/groups/:name/delete", groupsDelete),
groups("POST", "/groups/:name/members/delete", groupsRemoveMember),
// Permissions
permissions("GET", "/permissions", rolesList),
permissions("POST", "/permissions", rolesCreate),
permissions("GET", "/permissions/new", rolesNewForm),
permissions("GET", "/permissions/:name", rolesDetail),
permissions("POST", "/permissions/:name/members", rolesAddMember),
permissions("GET", "/permissions/:name/delete", rolesDeleteConfirm),
permissions("POST", "/permissions/:name/delete", rolesDelete),
permissions("POST", "/permissions/:name/members/delete", rolesRemoveMember),
groups("POST", "/groups/:name/permissions", groupsPermissions),
// OAuth2 clients
clients("GET", "/clients", clientsList),
clients("POST", "/clients", clientsCreate),