# Análisis de Protección de Rutas - Admin vs Cliente

## Resumen

Este documento analiza las rutas del sistema CD-SYSTEM para determinar cuáles deben estar protegidas solo para administradores y cuáles pueden ser accesibles para clientes.

## ✅ ESTRATEGIA IMPLEMENTADA

### **Clientes** (Contributor, Editor, Author)
Los clientes tienen acceso a:
- ✅ Todos los módulos de gestión de contenido (8 módulos)
- ✅ Site Data (Modificar datos del sitio)
- ✅ Dashboard y funcionalidades básicas

### **Administradores** (System Admin, Administrator)
Los administradores tienen acceso a:
- ✅ Todo lo que tienen los clientes
- ✅ **Q/A Checklist** (solo admin)
- ✅ **Project Setup / Alta Proyecto** (solo admin)

## Sistema de Roles Actual

El sistema utiliza **Spatie Laravel Permission** con los siguientes roles:

- **System Admin** - Acceso total al sistema
- **Administrator** - Acceso completo de administración
- **Editor** - Puede crear, editar y publicar contenido
- **Contributor** - Puede crear y editar su propio contenido
- **Author** - Puede crear, editar y publicar sus propios posts
- **Member** - Usuario sin acceso al panel de administración (equivalente a "Cliente")

## Middlewares Disponibles

Ya están registrados en `app/Http/Kernel.php`:

```php
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
```

## Rutas que REQUIEREN Protección Solo Admin

### 1. **Project Setup (Alta de Proyectos)** ⚠️ SIN PROTECCIÓN

**Ubicación:** `routes/modules/project-setup.php`

**Estado Actual:**
```php
Route::middleware(['auth', 'module.enabled:project-setup'])->group(function () {
    Route::prefix('project-setup')->name('project-setup.')->group(function () {
        Route::get('/', [\App\Http\Controllers\ProjectSetupController::class, 'index'])->name('index');
        Route::post('/generate', [\App\Http\Controllers\ProjectSetupController::class, 'generate'])->name('generate');
        Route::post('/update-assets', [\App\Http\Controllers\ProjectSetupController::class, 'updateAssets'])->name('update-assets');
    });
});
```

**Problema:** Solo requiere autenticación, cualquier usuario logueado puede acceder.

**Solución Propuesta:**
```php
Route::middleware(['auth', 'role:System Admin|Administrator', 'module.enabled:project-setup'])->group(function () {
    // ... rutas
});
```

### 2. **Q/A Checklist** ⚠️ SIN PROTECCIÓN

**Ubicación:** `routes/cd-system.php` (líneas 251-255)

**Estado Actual:**
```php
Route::middleware(['auth'])->prefix('cd-system/qa')->name('cd-system.qa.')->group(function () {
    Route::get('/', [\App\Http\Controllers\QAChecklistController::class, 'index'])->name('index');
    Route::get('/results', [\App\Http\Controllers\QAChecklistController::class, 'getResults'])->name('results');
    Route::post('/check', [\App\Http\Controllers\QAChecklistController::class, 'runSpecificChecks'])->name('check');
});
```

**Problema:** Solo requiere autenticación, cualquier usuario logueado puede acceder.

**Solución Propuesta:**
```php
Route::middleware(['auth', 'role:System Admin|Administrator'])->prefix('cd-system/qa')->name('cd-system.qa.')->group(function () {
    // ... rutas
});
```

## Otras Rutas de Admin (Ya protegidas o por revisar)

### 3. **Settings Module** ✅ PARCIALMENTE PROTEGIDO

**Ubicación:** `routes/cd-system.php` (líneas 29-72)

**Estado Actual:**
```php
Route::middleware(['auth', 'verified'])->prefix('admin')->name('cd-system.')->group(function () {
    Route::prefix('settings')->name('settings.')->group(function () {
        // ... rutas de settings
    });
});
```

**Estado:** El prefijo `/admin` indica intención de protección, pero NO hay middleware de rol.

**Recomendación:** Agregar `'role:System Admin|Administrator'`

### 4. **Debug Routes** ⚠️ PROTECCIÓN PARCIAL

**Ubicación:** `routes/cd-system.php` (líneas 179-208)

**Estado Actual:**
```php
if (!app()->environment('production')) {
    Route::prefix('cd-system/debug')->name('cd-system.debug.')->group(function () {
        // ... rutas de debug
    });
}
```

**Problema:** Solo protegido por entorno, no por rol.

**Recomendación:** Agregar `middleware(['auth', 'role:System Admin'])`

## Rutas de Módulos a Revisar

Necesitamos revisar cada archivo de módulo para identificar rutas administrativas:

### Módulos que probablemente necesitan protección:

1. **cd-base.php** - Users, Settings, Pages, Subscribers
2. **menu.php** - Gestión de menús
3. **site-data.php** - Datos del sitio
4. **blog.php** - Administración de blog
5. **news.php** - Administración de noticias
6. **projects.php** - Administración de proyectos
7. **services.php** - Administración de servicios
8. **team-members.php** - Administración de equipo
9. **gallery-working.php** - Administración de galería
10. **product.php** - Administración de productos
11. **references.php** - Administración de referencias
12. **tokko.php** - Integración Tokko

## Estrategia de Implementación

### Fase 1: Protección Inmediata (Prioridad Alta)
1. ✅ Project Setup - Solo System Admin y Administrator
2. ✅ Q/A Checklist - Solo System Admin y Administrator

### Fase 2: Auditoría Completa
1. Revisar todos los archivos en `routes/modules/`
2. Identificar rutas administrativas vs públicas
3. Aplicar middlewares correspondientes

### Fase 3: Verificación de Menús
1. Verificar que los menús solo muestren opciones según el rol
2. Asegurar que `config/demo1/menu.php` y `config/demo1/module-menu.php` respeten roles

## Patrones de Protección Recomendados

### Para rutas solo Admin:
```php
Route::middleware(['auth', 'role:System Admin|Administrator'])->group(function () {
    // Rutas administrativas
});
```

### Para rutas solo System Admin:
```php
Route::middleware(['auth', 'role:System Admin'])->group(function () {
    // Rutas de configuración crítica
});
```

### Para rutas con permisos específicos:
```php
Route::middleware(['auth', 'permission:manage_projects'])->group(function () {
    // Rutas que requieren permiso específico
});
```

### Para rutas públicas (frontend):
```php
Route::middleware(['web'])->group(function () {
    // Rutas públicas sin autenticación
});
```

## Inventario Completo de Rutas Administrativas

### ✅ RUTAS PRIORITARIAS (Alta de Proyectos y Q/A)

| Módulo | Archivo | Rutas | Estado Actual | Acción Requerida |
|--------|---------|-------|---------------|------------------|
| **Project Setup** | `routes/modules/project-setup.php` | `/project-setup/*` | ⚠️ Solo `auth` | Agregar `role:System Admin\|Administrator` |
| **Q/A Checklist** | `routes/cd-system.php` | `/cd-system/qa/*` | ⚠️ Solo `auth` | Agregar `role:System Admin\|Administrator` |

### 📋 TODAS LAS RUTAS ADMINISTRATIVAS QUE NECESITAN PROTECCIÓN

#### 1. **CD-Base Module** (`routes/modules/cd-base.php`)

| Sección | Prefijo | Líneas | Estado | Acción |
|---------|---------|--------|--------|--------|
| News Dashboard | `/news-settings` | 19-32 | ⚠️ Solo `auth` | Proteger con rol admin |
| FAQs Dashboard | `/faqs-settings` | 37-64 | ⚠️ Solo `auth` | Proteger con rol admin |
| Newsletter/Subscribers | `/subscribers` | 82-88 | ⚠️ Solo `auth` | Proteger con rol admin |
| Welcome Carousel | `/welcomecarousel` | 145-151 | ⚠️ Solo `auth` | Proteger con rol admin |
| Pages Settings | `/pages/settings` | 156-181 | ⚠️ Solo `auth` | Proteger con rol admin |
| User Management | `/user-management` | 184-192 | ⚠️ Solo `auth` | **CRÍTICO** - Proteger con rol admin |

#### 2. **Menu Module** (`routes/modules/menu.php`)

| Sección | Prefijo | Líneas | Estado | Acción |
|---------|---------|--------|--------|--------|
| Menu Settings | `/menu-settings` | 19-24 | ⚠️ Solo `auth` | Proteger con rol admin |
| Menu Management | `/menus` | 26-59 | ⚠️ Solo `auth` | Proteger con rol admin |
| Menu Categories | `/menus/categories` | 28-35 | ⚠️ Solo `auth` | Proteger con rol admin |
| Menu Products | `/menus/products` | 38-44 | ⚠️ Solo `auth` | Proteger con rol admin |

#### 3. **Site Data Module** (`routes/modules/site-data.php`)

| Sección | Prefijo | Líneas | Estado | Acción |
|---------|---------|--------|--------|--------|
| Site Data | `/site-data` | 17-22 | ⚠️ Solo `auth` | **CRÍTICO** - Proteger con rol admin |

#### 4. **Projects Module** (`routes/modules/projects.php`)

| Sección | Prefijo | Líneas | Estado | Acción |
|---------|---------|--------|--------|--------|
| Project Settings | `/project-settings` | 8-37 | ⚠️ Solo `auth` | Proteger con rol admin |
| Project Categories | `/project-settings/categories` | 12-22 | ⚠️ Solo `auth` | Proteger con rol admin |

#### 5. **Blog Module** (`routes/modules/blog.php`)

| Sección | Prefijo | Líneas | Estado | Acción |
|---------|---------|--------|--------|--------|
| Blog Settings | `/blog-settings` | 19-24 | ⚠️ Solo `auth` | Proteger con rol admin |
| Blog Posts | `/blog/posts` | 26-50 | ⚠️ Solo `auth` | Proteger con rol admin |
| Blog Categories | `/blog/categories` | 53-61 | ⚠️ Solo `auth` | Proteger con rol admin |

#### 6. **Services Module** (`routes/modules/services.php`)

| Sección | Prefijo | Líneas | Estado | Acción |
|---------|---------|--------|--------|--------|
| Services Settings | `/services-settings` | 8-25 | ⚠️ Solo `auth` | Proteger con rol admin |
| Service Categories | `/services-settings/categories` | 27-40 | ⚠️ Solo `auth` | Proteger con rol admin |

#### 7. **Otros Módulos por Revisar**

| Módulo | Archivo | Estado |
|--------|---------|--------|
| Team Members | `routes/modules/team-members.php` | 📋 Por revisar |
| Gallery | `routes/modules/gallery-working.php` | 📋 Por revisar |
| Product | `routes/modules/product.php` | 📋 Por revisar |
| References | `routes/modules/references.php` | 📋 Por revisar |
| Tokko | `routes/modules/tokko.php` | 📋 Por revisar |
| News | `routes/modules/news.php` | 📋 Por revisar |

## Resumen de Rutas Críticas

### 🔴 **CRÍTICO - Proteger Inmediatamente**

1. **User Management** - Gestión de usuarios
2. **Site Data** - Modificación de datos del sitio
3. **Project Setup** - Alta de proyectos
4. **Q/A Checklist** - Quality Assurance

### 🟡 **ALTO - Proteger en Fase 1**

5. News Dashboard
6. FAQs Dashboard
7. Menu Management
8. Pages Settings
9. Projects Management
10. Blog Management
11. Services Management

### 🟢 **MEDIO - Proteger en Fase 2**

12. Newsletter/Subscribers
13. Welcome Carousel
14. Team Members
15. Gallery
16. Product
17. References
18. Tokko

## ✅ Cambios Implementados

### 1. Protección de Rutas

#### **Q/A Checklist** (`routes/cd-system.php`)
```php
// Antes:
Route::middleware(['auth'])->prefix('cd-system/qa')->name('cd-system.qa.')->group(function () {

// Después:
Route::middleware(['auth', 'role:System Admin|Administrator'])->prefix('cd-system/qa')->name('cd-system.qa.')->group(function () {
```

#### **Project Setup** (`routes/modules/project-setup.php`)
```php
// Antes:
Route::middleware(['auth', 'module.enabled:project-setup'])->group(function () {

// Después:
Route::middleware(['auth', 'role:System Admin|Administrator', 'module.enabled:project-setup'])->group(function () {
```

### 2. Actualización de Menús (`config/demo1/menu.php`)

#### **Site Data** - Ahora accesible para clientes
```php
// Antes:
'role' => ['System Admin', 'Administrator'],

// Después:
'role' => ['System Admin', 'Administrator', 'Contributor', 'Editor', 'Author'],
```

#### **Q/A Checklist** - Agregado al menú (solo admin)
```php
[
    'title' => 'Q/A Checklist',
    'role' => ['System Admin', 'Administrator'],
    'path' => 'cd-system/qa',
    // ...
]
```

#### **Alta Proyecto** - Ya estaba correctamente protegido
```php
[
    'title' => 'Alta Proyecto',
    'role' => ['System Admin', 'Administrator'],
    'path' => 'project-setup',
    // ...
]
```

## Próximos Pasos (Opcionales)

### Fase Opcional: Mejoras Adicionales
1. 📋 Crear tests automatizados para verificar protecciones
2. 📋 Documentar permisos específicos por módulo
3. 📋 Auditoría de seguridad completa
4. 📋 Agregar logs de acceso a rutas administrativas

## Resumen de Accesos por Rol

| Funcionalidad | Cliente (Editor/Author/Contributor) | Admin (System Admin/Administrator) |
|---------------|-------------------------------------|-------------------------------------|
| Dashboard | ✅ | ✅ |
| Gestión de Contenido (8 módulos) | ✅ | ✅ |
| Site Data | ✅ | ✅ |
| **Q/A Checklist** | ❌ | ✅ |
| **Project Setup / Alta Proyecto** | ❌ | ✅ |
| Frontend Público | ✅ | ✅ |

## Módulos Accesibles para Clientes

Los clientes pueden gestionar todo el contenido del sitio:

1. ✅ **Gallery** - Gestión de galerías
2. ✅ **Blog** - Posts y categorías
3. ✅ **Products** - Productos y categorías
4. ✅ **Menu** - Menús de restaurante
5. ✅ **Projects** - Proyectos y portfolio
6. ✅ **Services** - Servicios
7. ✅ **Team Members** - Equipo
8. ✅ **News** - Noticias
9. ✅ **FAQs** - Preguntas frecuentes
10. ✅ **References** - Referencias/Clientes
11. ✅ **Site Data** - Datos del sitio (nombre, contacto, redes sociales)

## Notas Adicionales

- **Member** es el rol para usuarios sin acceso al panel administrativo
- Los clientes (Editor/Author/Contributor) tienen acceso completo a gestión de contenido
- Los admins (System Admin/Administrator) tienen acceso adicional a Q/A y Project Setup
- Las rutas están protegidas tanto a nivel de middleware como en el menú

---

**Fecha:** 2026-02-06
**Estado:** ✅ Completado e Implementado

