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
@@ -460,6 +460,34 @@ export const esTranslation = {
testBtn: 'Probar Conexión',
testingBtn: 'Probando…',
serverCompatible: 'Compatible con: Navidrome · Gonic · Airsonic · Subsonic',
userMgmtTitle: 'Gestión de usuarios',
userMgmtDesc: 'Administra los usuarios de este servidor. Requiere privilegios de administrador.',
userMgmtNoAdmin: 'Necesitas privilegios de administrador para gestionar usuarios en este servidor.',
userMgmtLoadError: 'No se pudieron cargar los usuarios.',
userMgmtEmpty: 'No se encontraron usuarios.',
userMgmtYouBadge: 'Tú',
userMgmtAdminBadge: 'Admin',
userMgmtAddUser: 'Añadir usuario',
userMgmtAddUserTitle: 'Nuevo usuario',
userMgmtEditUserTitle: 'Editar usuario',
userMgmtUsername: 'Nombre de usuario',
userMgmtName: 'Nombre visible',
userMgmtEmail: 'Correo electrónico',
userMgmtPassword: 'Contraseña',
userMgmtPasswordEditHint: 'Introduce una nueva contraseña para actualizarla.',
userMgmtRoleAdmin: 'Admin',
userMgmtSave: 'Guardar',
userMgmtCancel: 'Cancelar',
userMgmtDelete: 'Eliminar',
userMgmtEdit: 'Editar',
userMgmtConfirmDelete: '¿Eliminar el usuario «{{username}}»? Esta acción no se puede deshacer.',
userMgmtCreateError: 'No se pudo crear el usuario.',
userMgmtUpdateError: 'No se pudo actualizar el usuario.',
userMgmtDeleteError: 'No se pudo eliminar el usuario.',
userMgmtCreated: 'Usuario creado.',
userMgmtUpdated: 'Usuario actualizado.',
userMgmtDeleted: 'Usuario eliminado.',
userMgmtValidationMissing: 'Se requieren nombre de usuario, nombre visible y contraseña.',
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
audiomuseDesc:
'Activa si este servidor tiene el plugin <pluginLink>AudioMuse-AI Navidrome</pluginLink> configurado. Habilita Mezcla Instantánea desde pistas y usa artistas similares del servidor en lugar de Last.fm en páginas de artistas.',
@@ -620,6 +648,7 @@ export const esTranslation = {
randomNavSplitDesc: 'Mostrar "Mezcla Aleatoria" y "Álbumes Aleatorios" como entradas separadas en la barra lateral en lugar del hub "Crear Mezcla".',
tabInput: 'Entrada',
tabServer: 'Servidor',
tabUsers: 'Usuarios',
tabSystem: 'Sistema',
tabGeneral: 'General',
ratingsSectionTitle: 'Calificaciones',