# Modulo de Roles y Usuarios

## Que incluye

- **Usuarios** (nueva pantalla en el menu): crear, editar y activar/desactivar
  usuarios. **Nunca se ve ni se escribe una contraseña en pantalla** -- al
  crear un usuario, el sistema genera una clave temporal al azar y la envia
  por correo (via Brevo) a la direccion registrada.
- **Resetear clave**: boton por usuario que genera una clave nueva y la
  reenvia por correo, tambien sin mostrarla nunca en pantalla.
- **Roles** (parametrizables, ya no fijos en el codigo): vienen 3 roles de
  ejemplo (Administrador, Operador, Solo lectura) que puedes editar o
  desactivar, y puedes crear los que necesites.
- **Cambio de clave obligatorio**: cualquier usuario que reciba una clave
  temporal (nueva cuenta o reseteo) queda **obligado** a cambiarla la
  primera vez que ingresa -- la plataforma bloquea el acceso a cualquier
  otra pantalla hasta que lo haga.
- **Cambiar mi clave** (link en la barra superior): cualquier usuario puede
  cambiar su propia clave voluntariamente en cualquier momento.
- Protecciones basicas: no puedes desactivar tu propia cuenta, ni
  desactivar/quitarle el rol de administrador al ultimo administrador
  activo (evita que la cooperativa quede sin nadie que pueda gestionar
  usuarios).

## ⚠️ Importante: esto NO incluye permisos por rol todavia

Esta entrega resuelve exactamente lo que pediste: crear/editar usuarios y
resetear claves por correo. **Los roles por ahora son solo una etiqueta**
-- todavia no restringen que pantallas puede ver cada rol (ej. un usuario
con rol "Solo lectura" hoy en dia puede tecnicamente hacer lo mismo que un
Administrador, la plataforma no lo bloquea). Si quieres que active
restricciones reales por rol (ej. que "Solo lectura" no pueda crear
campañas ni editar contactos), dimelo y lo construyo como un siguiente
paso -- es un cambio mas grande porque hay que revisar cada pantalla.

---

## 1. Ejecutar la migracion de base de datos

```bash
sudo /opt/bitnami/mariadb/bin/mysql -u coop_mensajeria_user -p coop_mensajeria \
    < ~/fase21-entrega/mensajeria-core/install/migration_v13_roles_usuarios.sql
```

Esta migracion NO afecta tu usuario administrador actual (sigue
funcionando igual, sin pedirle cambiar clave).

## 2. Subir los archivos

```bash
cd ~
unzip fase21-entrega.zip

sudo cp fase21-entrega/htdocs-mensajeria/index.php \
    /opt/bitnami/apache/htdocs/mensajeria/index.php

sudo cp fase21-entrega/mensajeria-core/app/Models/RoleModel.php \
    /opt/bitnami/mensajeria-core/app/Models/RoleModel.php
sudo cp fase21-entrega/mensajeria-core/app/Models/UserModel.php \
    /opt/bitnami/mensajeria-core/app/Models/UserModel.php

sudo cp fase21-entrega/mensajeria-core/app/Controllers/UserController.php \
    /opt/bitnami/mensajeria-core/app/Controllers/UserController.php
sudo cp fase21-entrega/mensajeria-core/app/Controllers/RoleController.php \
    /opt/bitnami/mensajeria-core/app/Controllers/RoleController.php
sudo cp fase21-entrega/mensajeria-core/app/Controllers/ProfileController.php \
    /opt/bitnami/mensajeria-core/app/Controllers/ProfileController.php
sudo cp fase21-entrega/mensajeria-core/app/Controllers/AuthController.php \
    /opt/bitnami/mensajeria-core/app/Controllers/AuthController.php

sudo cp fase21-entrega/mensajeria-core/app/Services/PasswordGenerator.php \
    /opt/bitnami/mensajeria-core/app/Services/PasswordGenerator.php
sudo cp fase21-entrega/mensajeria-core/app/Services/UserNotificationService.php \
    /opt/bitnami/mensajeria-core/app/Services/UserNotificationService.php

sudo cp fase21-entrega/mensajeria-core/app/Helpers/helpers.php \
    /opt/bitnami/mensajeria-core/app/Helpers/helpers.php

sudo mkdir -p /opt/bitnami/mensajeria-core/resources/views/users
sudo mkdir -p /opt/bitnami/mensajeria-core/resources/views/roles
sudo mkdir -p /opt/bitnami/mensajeria-core/resources/views/profile

sudo cp fase21-entrega/mensajeria-core/resources/views/users/*.php \
    /opt/bitnami/mensajeria-core/resources/views/users/
sudo cp fase21-entrega/mensajeria-core/resources/views/roles/*.php \
    /opt/bitnami/mensajeria-core/resources/views/roles/
sudo cp fase21-entrega/mensajeria-core/resources/views/profile/*.php \
    /opt/bitnami/mensajeria-core/resources/views/profile/
sudo cp fase21-entrega/mensajeria-core/resources/views/layouts/main.php \
    /opt/bitnami/mensajeria-core/resources/views/layouts/main.php
```

## 3. Permisos y reinicio

```bash
sudo chown -R bitnami:daemon /opt/bitnami/mensajeria-core/app
sudo chown -R bitnami:daemon /opt/bitnami/mensajeria-core/resources
sudo chown bitnami:daemon /opt/bitnami/apache/htdocs/mensajeria/index.php
sudo /opt/bitnami/ctlscript.sh restart php-fpm
```

## 4. Probar

1. Ve a **Usuarios** en el menu -- deberias ver tu usuario administrador
   actual en la lista.
2. Clic en **Nuevo usuario**. Crea uno de prueba con **tu propio correo
   personal** (para poder revisar el email que llega), rol "Operador".
3. Revisa tu correo (y spam) -- deberia llegar un mensaje con la clave
   temporal.
4. Abre una ventana de incognito, entra a la plataforma, e inicia sesion
   con ese usuario nuevo y la clave que llego por correo.
5. Deberia llevarte directo a la pantalla de **"Cambiar contrasena"**, sin
   dejarte ir a ninguna otra parte hasta que la cambies.
6. Cambia la clave, confirma que te deja entrar normal al dashboard
   despues.
7. Vuelve a tu sesion de administrador, ve a Usuarios, prueba **"Resetear
   clave"** sobre ese usuario de prueba -- deberia llegarte otro correo con
   una clave nueva.
8. Prueba tambien **Roles**: crea uno nuevo (ej. "Cobranzas"), confirma que
   aparece como opcion al crear/editar un usuario.
9. Prueba las protecciones: intenta desactivar tu propia cuenta (deberia
   estar bloqueado el boton), y si solo tienes un administrador, intenta
   cambiarle el rol a otro (deberia bloquear con un mensaje de error).

## Si algo falla

```bash
sudo tail -30 /opt/bitnami/apache/logs/error_log
```

Si el correo de bienvenida/reseteo no llega, revisa que
`BREVO_API_KEY` y `BREVO_SENDER_EMAIL` en tu `.env` sigan configurados
correctamente (son los mismos que ya usa el resto de la plataforma para
enviar campañas).
