From aa2d92a7aec0d4347406273a2317045efd56aff9 Mon Sep 17 00:00:00 2001 From: restitux Date: Thu, 16 Apr 2026 02:39:15 +0000 Subject: [PATCH] frontend: add admin panel for user and permission management Admin-only page at /admin with: - Create user form (username, password, admin toggle) - User list table with edit and delete actions - Inline user editing (change password, toggle admin role) - Inline permission editor with per-app checkboxes grouped by server - Access guarded by checking is_admin from /api/auth/me Co-Authored-By: Claude Opus 4.6 --- frontend/src/routes/admin/+page.svelte | 535 +++++++++++++++++++++++++ 1 file changed, 535 insertions(+) create mode 100644 frontend/src/routes/admin/+page.svelte diff --git a/frontend/src/routes/admin/+page.svelte b/frontend/src/routes/admin/+page.svelte new file mode 100644 index 0000000..4a1dc9c --- /dev/null +++ b/frontend/src/routes/admin/+page.svelte @@ -0,0 +1,535 @@ + + + + Admin + + +
+

User Management

+ + {#if loading} +

Loading...

+ {:else if error} +

{error}

+ {:else} + +
+

Create User

+
{ e.preventDefault(); createUser(); }}> + + + + +
+ {#if createError} +

{createError}

+ {/if} +
+ + +
+

Users

+ + + + + + + + + + {#each users as user} + + + + + + + + {#if editingUserDetails === user.id} + + + + {/if} + + + {#if editingUserId === user.id} + + + + {/if} + {/each} + +
UsernameRoleActions
{user.username} + + {user.is_admin ? 'Admin' : 'User'} + + + + + +
+
+
+ + +
+
+ +
+ {#if editError} +

{editError}

+ {/if} +
+ + +
+
+
+
+

App Permissions for {user.username}

+ {#if Object.keys(allApps).length === 0} +

No servers paired. Pair a server first to manage app permissions.

+ {:else} + {#each Object.entries(allApps) as [serverName, apps]} +
+

{serverName}

+ {#each apps as app} + + {/each} +
+ {/each} + {/if} +
+ + +
+
+
+
+ {/if} +
+ + -- 2.52.0