f96391d360
- 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>
28 lines
1.0 KiB
JavaScript
28 lines
1.0 KiB
JavaScript
import { Router } from 'express';
|
|
import { requireAuth } from '../../middleware/auth.js';
|
|
import {
|
|
getProjects, getProject, postProject, putProject, deleteProject, postProjectRestore,
|
|
deleteProjectPermanent, postMember, putMemberRole, deleteMember,
|
|
} from './controller.js';
|
|
import { getGantt } from '../dashboard/controller.js';
|
|
import { getActivitiesByProject, postActivity } from '../activities/controller.js';
|
|
|
|
const router = Router();
|
|
|
|
router.use(requireAuth);
|
|
router.get('/', getProjects);
|
|
router.post('/', postProject);
|
|
router.get('/:id', getProject);
|
|
router.put('/:id', putProject);
|
|
router.delete('/:id', deleteProject);
|
|
router.post('/:id/restore', postProjectRestore);
|
|
router.delete('/:id/permanent', deleteProjectPermanent);
|
|
router.get('/:id/gantt', getGantt);
|
|
router.post('/:id/members', postMember);
|
|
router.put('/:id/members/:userId/role', putMemberRole);
|
|
router.delete('/:id/members/:userId', deleteMember);
|
|
router.get('/:projectId/activities', getActivitiesByProject);
|
|
router.post('/:projectId/activities', postActivity);
|
|
|
|
export default router;
|