# Sistema Multiusuario DirexCRM

## 🎯 Configuración de Roles y Permisos

El sistema DirexCRM ahora está configurado para funcionar con múltiples usuarios con diferentes niveles de acceso según su rol.

## 👥 Roles Disponibles

### 1. **admin** - Administrador
**Acceso:** Total
- Gestiona todos los módulos
- Puede crear, editar y eliminar cualquier registro
- Configuración del sistema

### 2. **service** - Área de Servicios
**Acceso:** Operativo (Servicios y Tickets)
- ✅ Ver y gestionar **Servicios**
- ✅ Ver y gestionar **Tickets**
- ✅ Ver equipos (solo lectura)
- ✅ Ver clientes (solo lectura)
- ❌ NO puede acceder a facturación, contratos, stock

### 3. **ventas** - Área Administrativa
**Acceso:** Administrativo (Clientes, Contratos, Facturación)
- ✅ Ver y gestionar **Clientes**
- ✅ Ver y gestionar **Equipos**
- ✅ Ver y gestionar **Contratos**
- ✅ Ver y gestionar **Facturas**
- ✅ Ver servicios (solo lectura)
- ❌ NO puede acceder a servicios/tickets (solo ver)
- ❌ NO puede acceder a stock

### 4. **stock** - Área de Logística
**Acceso:** Stock (Repuestos, Importaciones, Remitos)
- ✅ Ver y gestionar **Repuestos**
- ✅ Ver y gestionar **Importaciones**
- ✅ Ver y gestionar **Remitos**
- ❌ NO puede acceder a servicios, clientes, facturación

### 5. **viewer** - Visualizador
**Acceso:** Solo lectura
- ✅ Puede ver todos los módulos
- ❌ NO puede crear, editar o eliminar
- Solo consulta

## 🔐 Usuarios de Prueba

### Credenciales de Acceso

1. **Administrador**
   - Email: `admin@direxcrm.com`
   - Contraseña: `password`
   - Acceso: Total

2. **Técnico de Servicios**
   - Email: `service@direxcrm.com`
   - Contraseña: `password`
   - Acceso: Servicios y Tickets

3. **Analista de Ventas**
   - Email: `ventas@direxcrm.com`
   - Contraseña: `password`
   - Acceso: Clientes, Equipos, Contratos, Facturas

4. **Responsable de Stock**
   - Email: `stock@direxcrm.com`
   - Contraseña: `password`
   - Acceso: Repuestos, Importaciones, Remitos

5. **Visualizador**
   - Email: `viewer@direxcrm.com`
   - Contraseña: `password`
   - Acceso: Solo lectura

## 📋 Mapa de Permisos por Módulo

| Módulo | admin | service | ventas | stock | viewer |
|--------|:-----:|:-------:|:------:|:-----:|:------:|
| **Clientes** | ✅ | 👁️ | ✅ | ❌ | 👁️ |
| **Equipos** | ✅ | 👁️ | ✅ | ❌ | 👁️ |
| **Servicios** | ✅ | ✅ | 👁️ | ❌ | 👁️ |
| **Tickets** | ✅ | ✅ | ❌ | ❌ | 👁️ |
| **Repuestos** | ✅ | ❌ | ❌ | ✅ | 👁️ |
| **Importaciones** | ✅ | ❌ | ❌ | ✅ | 👁️ |
| **Remitos** | ✅ | ❌ | ❌ | ✅ | 👁️ |
| **Contratos** | ✅ | ❌ | ✅ | ❌ | 👁️ |
| **Facturas** | ✅ | ❌ | ✅ | ❌ | 👁️ |
| **Auditoría** | ✅ | ❌ | ❌ | ❌ | ❌ |

**Leyenda:**
- ✅ Acceso completo (crear, editar, eliminar)
- 👁️ Solo lectura
- ❌ Sin acceso

## 🔒 Políticas Implementadas

Las siguientes políticas han sido configuradas:

1. ✅ `ClientPolicy` - Control de acceso a clientes
2. ✅ `DevicePolicy` - Control de acceso a equipos
3. ✅ `ServicePolicy` - Control de acceso a servicios
4. ✅ `TicketPolicy` - Control de acceso a tickets
5. ✅ `InvoicePolicy` - Control de acceso a facturas
6. ✅ `ContractPolicy` - Control de acceso a contratos
7. ✅ `SparePolicy` - Control de acceso a repuestos
8. ✅ `ImportPolicy` - Control de acceso a importaciones

## 🧪 Cómo Probar el Sistema Multiusuario

### 1. Iniciar sesión con usuario de servicios

```bash
# Login con
Email: service@direxcrm.com
Password: password
```

**Verificar:**
- ✅ Puede ver y gestionar Servicios
- ✅ Puede ver y gestionar Tickets
- ✅ Puede VER Clientes (solo lectura)
- ❌ NO puede acceder a Facturas
- ❌ NO puede acceder a Repuestos

### 2. Iniciar sesión con usuario de ventas

```bash
# Login con
Email: ventas@direxcrm.com
Password: password
```

**Verificar:**
- ✅ Puede ver y gestionar Clientes
- ✅ Puede ver y gestionar Contratos
- ✅ Puede ver y gestionar Facturas
- ✅ Puede VER Servicios (solo lectura)
- ❌ NO puede acceder a Tickets (no aparece en menú)
- ❌ NO puede acceder a Repuestos

### 3. Iniciar sesión con usuario de stock

```bash
# Login con
Email: stock@direxcrm.com
Password: password
```

**Verificar:**
- ✅ Puede ver y gestionar Repuestos
- ✅ Puede ver y gestionar Importaciones
- ✅ Puede ver y gestionar Remitos
- ❌ NO puede acceder a Servicios
- ❌ NO puede acceder a Clientes
- ❌ NO puede acceder a Facturas

### 4. Iniciar sesión con viewer

```bash
# Login con
Email: viewer@direxcrm.com
Password: password
```

**Verificar:**
- ✅ Puede VER todos los módulos
- ❌ NO puede crear registros
- ❌ NO puede editar registros
- ❌ Los botones "Nuevo" y "Editar" no aparecen

## 📝 Crear Nuevos Usuarios

Para crear nuevos usuarios con roles específicos:

```bash
php artisan tinker
```

```php
// Crear usuario de servicios
$user = App\Models\User::create([
    'name' => 'Nuevo Técnico',
    'email' => 'nuevotecnico@direxcrm.com',
    'password' => bcrypt('password')
]);
$user->assignRole('service');

// Crear usuario de ventas
$user = App\Models\User::create([
    'name' => 'Nuevo Vendedor',
    'email' => 'nuevovendedor@direxcrm.com',
    'password' => bcrypt('password')
]);
$user->assignRole('ventas');

// Crear usuario de stock
$user = App\Models\User::create([
    'name' => 'Nuevo Responsable Stock',
    'email' => 'nuevostock@direxcrm.com',
    'password' => bcrypt('password')
]);
$user->assignRole('stock');
```

## 🎯 Diferenciación de Áreas

### Área Administrativa (ventas)
**Enfoque:** Gestión comercial y facturación
- Clientes y contactos
- Equipos médicos
- Contratos de mantenimiento
- Facturación y cobranza

### Área Operativa (service)
**Enfoque:** Servicios técnicos y soporte
- Servicios técnicos
- Tickets de soporte
- Historial de intervenciones
- Cierre de servicios

### Área de Logística (stock)
**Enfoque:** Gestión de inventario
- Repuestos e insumos
- Importaciones
- Remitos y envíos
- Control de stock

## ✨ Ventajas del Sistema Multiusuario

✅ **Seguridad** - Cada usuario solo ve lo que necesita  
✅ **Organización** - Separación clara de responsabilidades  
✅ **Control** - Auditoría de quién hace qué  
✅ **Escalabilidad** - Fácil agregar nuevos roles y permisos  
✅ **Productividad** - Interfaces simplificadas por rol  

## 🔧 Modificar Permisos

Para modificar los permisos de un rol:

```bash
php artisan tinker
```

```php
use Spatie\Permission\Models\Role;

// Obtener el rol
$role = Role::findByName('service');

// Agregar permiso
$role->givePermissionTo('clients.update');

// Quitar permiso
$role->revokePermissionTo('clients.update');

// Ver permisos del rol
$role->permissions->pluck('name');
```

## 📊 Dashboard por Rol

Los widgets del dashboard mostrarán solo la información relevante para cada rol:

- **admin:** Todos los KPIs
- **service:** KPIs de Servicios y Tickets
- **ventas:** KPIs de Facturación
- **stock:** KPIs de Stock
- **viewer:** KPIs de solo lectura

## 🚀 Sistema Listo para Producción

El sistema multiusuario está completamente configurado y listo para uso en producción con diferentes roles y permisos.

