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
@@ -457,6 +457,34 @@ export const frTranslation = {
testBtn: 'Tester la connexion',
testingBtn: 'Test en cours…',
serverCompatible: 'Compatible avec : Navidrome · Gonic · Airsonic · Subsonic',
userMgmtTitle: 'Gestion des utilisateurs',
userMgmtDesc: 'Gérer les utilisateurs sur ce serveur. Nécessite des privilèges administrateur.',
userMgmtNoAdmin: 'Vous devez être administrateur pour gérer les utilisateurs sur ce serveur.',
userMgmtLoadError: 'Impossible de charger les utilisateurs.',
userMgmtEmpty: 'Aucun utilisateur trouvé.',
userMgmtYouBadge: 'Vous',
userMgmtAdminBadge: 'Admin',
userMgmtAddUser: 'Ajouter un utilisateur',
userMgmtAddUserTitle: 'Nouvel utilisateur',
userMgmtEditUserTitle: 'Modifier lutilisateur',
userMgmtUsername: 'Nom dutilisateur',
userMgmtName: 'Nom affiché',
userMgmtEmail: 'E-mail',
userMgmtPassword: 'Mot de passe',
userMgmtPasswordEditHint: 'Saisir un nouveau mot de passe pour le modifier.',
userMgmtRoleAdmin: 'Admin',
userMgmtSave: 'Enregistrer',
userMgmtCancel: 'Annuler',
userMgmtDelete: 'Supprimer',
userMgmtEdit: 'Modifier',
userMgmtConfirmDelete: 'Supprimer lutilisateur « {{username}} » ? Action irréversible.',
userMgmtCreateError: 'Impossible de créer lutilisateur.',
userMgmtUpdateError: 'Impossible de mettre à jour lutilisateur.',
userMgmtDeleteError: 'Impossible de supprimer lutilisateur.',
userMgmtCreated: 'Utilisateur créé.',
userMgmtUpdated: 'Utilisateur mis à jour.',
userMgmtDeleted: 'Utilisateur supprimé.',
userMgmtValidationMissing: 'Nom dutilisateur, nom affiché et mot de passe sont requis.',
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
audiomuseDesc:
'Activez si ce serveur utilise le <pluginLink>plugin Navidrome AudioMuse-AI</pluginLink>. Active le mix instantané depuis un morceau et affiche les artistes similaires côté serveur au lieu de Last.fm sur les pages artiste.',
@@ -615,6 +643,7 @@ export const frTranslation = {
randomNavSplitDesc: 'Afficher "Mix Aléatoire" et "Albums Aléatoires" comme entrées séparées dans la barre latérale plutôt que le hub "Créer un Mix".',
tabInput: 'Entrée',
tabServer: 'Serveur',
tabUsers: 'Utilisateurs',
shortcutsReset: 'Réinitialiser',
shortcutListening: 'Appuyez sur une touche…',
shortcutUnbound: '—',