mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-07-18 19:36:02 +00:00
feat: add configurable permissions system with admin panel
Adds a full permissions management feature allowing admins to control who can perform actions across the app (trip CRUD, files, places, budget, packing, reservations, collab, members, share links). - New server/src/services/permissions.ts: 16 configurable actions, in-memory cache, checkPermission() helper, backwards-compatible defaults matching upstream behaviour - GET/PUT /admin/permissions endpoints; permissions loaded into app-config response so clients have them on startup - checkPermission() applied to all mutating route handlers across 10 server route files; getTripOwnerId() helper eliminates repeated inline DB queries; trips.ts and files.ts now reuse canAccessTrip() result to avoid redundant DB round-trips - New client/src/store/permissionsStore.ts: Zustand store + useCanDo() hook; TripOwnerContext type accepts both Trip and DashboardTrip shapes without casting at call sites - New client/src/components/Admin/PermissionsPanel.tsx: categorised UI with per-action dropdowns, customised badge, save/reset - AdminPage, DashboardPage, FileManager, PlacesSidebar, TripMembersModal gated via useCanDo(); no prop drilling - 46 perm.* translation keys added to all 12 language files
This commit is contained in:
@@ -1425,6 +1425,55 @@ const es: Record<string, string> = {
|
||||
// Settings (2.6.2)
|
||||
'settings.currentPasswordRequired': 'La contraseña actual es obligatoria',
|
||||
'settings.passwordWeak': 'La contraseña debe contener mayúsculas, minúsculas y números',
|
||||
|
||||
// Permissions
|
||||
'admin.tabs.permissions': 'Permisos',
|
||||
'perm.title': 'Configuración de permisos',
|
||||
'perm.subtitle': 'Controla quién puede realizar acciones en la aplicación',
|
||||
'perm.saved': 'Configuración de permisos guardada',
|
||||
'perm.resetDefaults': 'Restablecer valores predeterminados',
|
||||
'perm.customized': 'personalizado',
|
||||
'perm.level.admin': 'Solo administrador',
|
||||
'perm.level.tripOwner': 'Propietario del viaje',
|
||||
'perm.level.tripMember': 'Miembros del viaje',
|
||||
'perm.level.everybody': 'Todos',
|
||||
'perm.cat.trip': 'Gestión de viajes',
|
||||
'perm.cat.members': 'Gestión de miembros',
|
||||
'perm.cat.files': 'Archivos',
|
||||
'perm.cat.content': 'Contenido y horario',
|
||||
'perm.cat.extras': 'Presupuesto, equipaje y colaboración',
|
||||
'perm.action.trip_create': 'Crear viajes',
|
||||
'perm.action.trip_edit': 'Editar detalles del viaje',
|
||||
'perm.action.trip_delete': 'Eliminar viajes',
|
||||
'perm.action.trip_archive': 'Archivar / desarchivar viajes',
|
||||
'perm.action.trip_cover_upload': 'Subir imagen de portada',
|
||||
'perm.action.member_manage': 'Añadir / eliminar miembros',
|
||||
'perm.action.file_upload': 'Subir archivos',
|
||||
'perm.action.file_edit': 'Editar metadatos del archivo',
|
||||
'perm.action.file_delete': 'Eliminar archivos',
|
||||
'perm.action.place_edit': 'Añadir / editar / eliminar lugares',
|
||||
'perm.action.day_edit': 'Editar días, notas y asignaciones',
|
||||
'perm.action.reservation_edit': 'Gestionar reservas',
|
||||
'perm.action.budget_edit': 'Gestionar presupuesto',
|
||||
'perm.action.packing_edit': 'Gestionar listas de equipaje',
|
||||
'perm.action.collab_edit': 'Colaboración (notas, encuestas, chat)',
|
||||
'perm.action.share_manage': 'Gestionar enlaces compartidos',
|
||||
'perm.actionHint.trip_create': 'Quién puede crear nuevos viajes',
|
||||
'perm.actionHint.trip_edit': 'Quién puede cambiar el nombre, fechas, descripción y moneda del viaje',
|
||||
'perm.actionHint.trip_delete': 'Quién puede eliminar permanentemente un viaje',
|
||||
'perm.actionHint.trip_archive': 'Quién puede archivar o desarchivar un viaje',
|
||||
'perm.actionHint.trip_cover_upload': 'Quién puede subir o cambiar la imagen de portada',
|
||||
'perm.actionHint.member_manage': 'Quién puede invitar o eliminar miembros del viaje',
|
||||
'perm.actionHint.file_upload': 'Quién puede subir archivos a un viaje',
|
||||
'perm.actionHint.file_edit': 'Quién puede editar descripciones y enlaces de archivos',
|
||||
'perm.actionHint.file_delete': 'Quién puede mover archivos a la papelera o eliminarlos permanentemente',
|
||||
'perm.actionHint.place_edit': 'Quién puede añadir, editar o eliminar lugares',
|
||||
'perm.actionHint.day_edit': 'Quién puede editar días, notas de días y asignaciones de lugares',
|
||||
'perm.actionHint.reservation_edit': 'Quién puede crear, editar o eliminar reservas',
|
||||
'perm.actionHint.budget_edit': 'Quién puede crear, editar o eliminar partidas del presupuesto',
|
||||
'perm.actionHint.packing_edit': 'Quién puede gestionar artículos de equipaje y bolsas',
|
||||
'perm.actionHint.collab_edit': 'Quién puede crear notas, encuestas y enviar mensajes',
|
||||
'perm.actionHint.share_manage': 'Quién puede crear o eliminar enlaces compartidos públicos',
|
||||
}
|
||||
|
||||
export default es
|
||||
|
||||
Reference in New Issue
Block a user