feat: administradores por proyecto y Configuracion solo para superadmin

- Un proyecto puede tener uno o mas administradores (role_in_project=
  'admin' en project_members), independiente del rol global del usuario.
  Nuevo PUT /api/projects/:id/members/:userId/role; canWriteProject lo
  reconoce ademas del comportamiento previo (admin/superadmin/it_manager
  global, o project_lead miembro). UI: casilla al agregar miembro + boton
  de escudo para promover/degradar (nunca toca al Dueño).
- Menu "Configuracion" (apariencia, catalogos, SMTP) visible y accesible
  solo para el superadmin: oculto en el nav y con guarda en la ruta
  /configuracion para quien la teclee directo. Escritura de catalogos
  restringida de [superadmin, admin] a solo superadmin para que el
  backend sea consistente con la UI.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-09-09 09:41:06 -05:00
parent e018eba8c1
commit f96391d360
16 changed files with 144 additions and 28 deletions
+19
View File
@@ -1,5 +1,24 @@
# Changelog - project.linkedcorp.net
## [1.6.0] - 2026-09-09
### Added
- Un proyecto puede tener **uno o más administradores del proyecto** (`role_in_project = 'admin'`
en `project_members`), sin importar el rol global del usuario — un `collaborator` puede ser
administrador de un proyecto puntual. Se otorga/quita desde Miembros: casilla "Agregar como
administrador del proyecto" al agregar, y un botón de escudo para promover/degradar a un
miembro existente (protegido: nunca toca al `Dueño`). Nuevo `PUT
/api/projects/:id/members/:userId/role`. `canWriteProject` ahora reconoce este rol por-proyecto
además del comportamiento previo (admin/superadmin/it_manager global, o project_lead miembro).
### Changed
- El menú "Configuración" (apariencia, catálogos, SMTP) ahora es **visible y accesible solo para
el superadmin** — antes cualquier usuario logueado lo veía y podía entrar (el tema/idioma
personal sigue disponible para todos desde los íconos de la barra superior, eso no cambió). Se
guarda tanto en el menú lateral como en la ruta directa `/configuracion`.
- Escritura de catálogos (`/api/catalogs/*`, usado por la pantalla de Configuración) restringida
de `[superadmin, admin]` a solo `superadmin`, para que el backend sea consistente con que
`admin` ya no ve ni puede entrar a esa pantalla — la lectura sigue abierta a cualquier usuario
(los combos de prioridad/estado en el resto de la app la necesitan).
## [1.5.0] - 2026-09-09
### Added
- Eliminar proyecto: eliminación **lógica** (`deleted_at`/`deleted_by`) disponible para quien puede