feat(settings): admin-gated User Management tab via Navidrome REST API

Adds a dedicated Settings tab for managing Navidrome users (list, create,
edit, delete). Only visible to admins — gated by `/auth/login` probe on
mount. Uses Navidrome's native /api/user endpoints instead of Subsonic
(getUsers.view etc. return only the caller on Navidrome). All HTTP calls
go through new Rust commands to bypass WebView CORS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-19 23:35:14 +02:00
parent 69dd374e80
commit dc819f3a2c
11 changed files with 814 additions and 2 deletions
+29
View File
@@ -456,6 +456,34 @@ export const nlTranslation = {
testBtn: 'Verbinding testen',
testingBtn: 'Testen…',
serverCompatible: 'Compatibel met: Navidrome · Gonic · Airsonic · Subsonic',
userMgmtTitle: 'Gebruikersbeheer',
userMgmtDesc: 'Beheer gebruikers op deze server. Vereist admin-rechten.',
userMgmtNoAdmin: 'Je hebt admin-rechten nodig om gebruikers op deze server te beheren.',
userMgmtLoadError: 'Kon gebruikers niet laden.',
userMgmtEmpty: 'Geen gebruikers gevonden.',
userMgmtYouBadge: 'Jij',
userMgmtAdminBadge: 'Admin',
userMgmtAddUser: 'Gebruiker toevoegen',
userMgmtAddUserTitle: 'Nieuwe gebruiker',
userMgmtEditUserTitle: 'Gebruiker bewerken',
userMgmtUsername: 'Gebruikersnaam',
userMgmtName: 'Weergavenaam',
userMgmtEmail: 'E-mail',
userMgmtPassword: 'Wachtwoord',
userMgmtPasswordEditHint: 'Voer een nieuw wachtwoord in om het bij te werken.',
userMgmtRoleAdmin: 'Admin',
userMgmtSave: 'Opslaan',
userMgmtCancel: 'Annuleren',
userMgmtDelete: 'Verwijderen',
userMgmtEdit: 'Bewerken',
userMgmtConfirmDelete: 'Gebruiker "{{username}}" verwijderen? Dit kan niet ongedaan worden gemaakt.',
userMgmtCreateError: 'Aanmaken van gebruiker mislukt.',
userMgmtUpdateError: 'Bijwerken van gebruiker mislukt.',
userMgmtDeleteError: 'Verwijderen van gebruiker mislukt.',
userMgmtCreated: 'Gebruiker aangemaakt.',
userMgmtUpdated: 'Gebruiker bijgewerkt.',
userMgmtDeleted: 'Gebruiker verwijderd.',
userMgmtValidationMissing: 'Gebruikersnaam, weergavenaam en wachtwoord zijn vereist.',
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
audiomuseDesc:
'Zet aan als deze server de <pluginLink>AudioMuse-AI Navidrome-plugin</pluginLink> gebruikt. Schakelt Instant Mix per nummer in en toont vergelijkbare artiesten van de server i.p.v. Last.fm op artiestpaginas.',
@@ -614,6 +642,7 @@ export const nlTranslation = {
randomNavSplitDesc: 'Toon "Willekeurige mix" en "Willekeurige albums" als afzonderlijke zijbalkitems in plaats van de "Mix samenstellen"-hub.',
tabInput: 'Invoer',
tabServer: 'Server',
tabUsers: 'Gebruikers',
shortcutsReset: 'Standaard herstellen',
shortcutListening: 'Druk op een toets…',
shortcutUnbound: '—',