esta todo ok
This commit is contained in:
166
ROLES_IMPLEMENTATION_GUIDE.md
Normal file
166
ROLES_IMPLEMENTATION_GUIDE.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# Guía de Implementación del Sistema de Roles
|
||||
|
||||
## 📋 Resumen
|
||||
Se implementa un sistema de roles basado en base de datos con 3 roles:
|
||||
- **Administrador** (id=1): Acceso completo
|
||||
- **Asesor** (id=2): Solo informes y reportes
|
||||
- **Mecánico** (id=3): Crear y completar inspecciones
|
||||
|
||||
## 🔄 Pasos de Migración
|
||||
|
||||
### 1. Ejecutar Migración de Base de Datos
|
||||
```bash
|
||||
cd backend
|
||||
python migrate_roles.py
|
||||
```
|
||||
|
||||
Esto hará:
|
||||
- ✅ Crear tabla `roles`
|
||||
- ✅ Insertar 3 roles predefinidos
|
||||
- ✅ Migrar usuarios existentes (admin -> administrador, mechanic -> mecanico)
|
||||
- ✅ Eliminar columna `role` antigua
|
||||
|
||||
### 2. Reemplazar Verificaciones de Permisos en main.py
|
||||
|
||||
**ANTES:**
|
||||
```python
|
||||
if current_user.role != "admin":
|
||||
raise HTTPException(status_code=403, detail="No tienes permisos")
|
||||
```
|
||||
|
||||
**DESPUÉS:**
|
||||
```python
|
||||
require_permission(current_user, "can_manage_users")
|
||||
```
|
||||
|
||||
### 3. Permisos por Rol
|
||||
|
||||
| Permiso | Administrador | Asesor | Mecánico |
|
||||
|---------|--------------|--------|----------|
|
||||
| can_manage_users | ✅ | ❌ | ❌ |
|
||||
| can_manage_roles | ✅ | ❌ | ❌ |
|
||||
| can_manage_checklists | ✅ | ❌ | ❌ |
|
||||
| can_create_inspections | ✅ | ❌ | ✅ |
|
||||
| can_view_all_inspections | ✅ | ✅ | ❌ |
|
||||
| can_view_reports | ✅ | ✅ | ❌ |
|
||||
| can_deactivate_inspections | ✅ | ❌ | ❌ |
|
||||
|
||||
### 4. Cambios en Endpoints
|
||||
|
||||
#### Gestión de Usuarios
|
||||
```python
|
||||
# Antes
|
||||
if current_user.role != "admin":
|
||||
|
||||
# Después
|
||||
require_permission(current_user, "can_manage_users")
|
||||
```
|
||||
|
||||
#### Gestión de Checklists
|
||||
```python
|
||||
# Antes
|
||||
if current_user.role != "admin":
|
||||
|
||||
# Después
|
||||
require_permission(current_user, "can_manage_checklists")
|
||||
```
|
||||
|
||||
#### Ver todas las Inspecciones
|
||||
```python
|
||||
# Antes
|
||||
if current_user.role == "mechanic":
|
||||
query = query.filter(models.Inspection.mechanic_id == current_user.id)
|
||||
|
||||
# Después
|
||||
if not has_permission(current_user, "can_view_all_inspections"):
|
||||
query = query.filter(models.Inspection.mechanic_id == current_user.id)
|
||||
```
|
||||
|
||||
#### Desactivar Inspecciones
|
||||
```python
|
||||
# Antes
|
||||
if current_user.role != "admin":
|
||||
|
||||
# Después
|
||||
require_permission(current_user, "can_deactivate_inspections")
|
||||
```
|
||||
|
||||
### 5. Actualizar Frontend
|
||||
|
||||
**schemas en App.jsx:**
|
||||
```javascript
|
||||
// Antes
|
||||
role: 'mechanic'
|
||||
|
||||
// Después
|
||||
role_id: 3, // mecanico
|
||||
role: {
|
||||
id: 3,
|
||||
name: 'mecanico',
|
||||
display_name: 'Mecánico',
|
||||
can_create_inspections: true,
|
||||
can_view_reports: false,
|
||||
// ...otros permisos
|
||||
}
|
||||
```
|
||||
|
||||
**Verificación de permisos:**
|
||||
```javascript
|
||||
// Antes
|
||||
if (user.role === 'admin')
|
||||
|
||||
// Después
|
||||
if (user.role.can_manage_users)
|
||||
```
|
||||
|
||||
### 6. Agregar Endpoints de Roles
|
||||
|
||||
Ver archivo `role_endpoints.txt` para los 5 nuevos endpoints:
|
||||
- GET /api/roles - Listar roles
|
||||
- GET /api/roles/{id} - Ver rol
|
||||
- POST /api/roles - Crear rol
|
||||
- PUT /api/roles/{id} - Actualizar rol
|
||||
- DELETE /api/roles/{id} - Eliminar rol
|
||||
|
||||
### 7. Actualizar Componentes Frontend
|
||||
|
||||
#### UsersTab
|
||||
- Cambiar selector de rol de texto a dropdown con roles de BD
|
||||
- Mostrar `role.display_name` en lugar de role
|
||||
- Enviar `role_id` en lugar de `role` al crear/editar
|
||||
|
||||
#### Sidebar
|
||||
- Mostrar tab "Informes" solo si `user.role.can_view_reports`
|
||||
- Mostrar tab "Usuarios" solo si `user.role.can_manage_users`
|
||||
|
||||
## ⚠️ Importante
|
||||
|
||||
1. **Backup de BD**: Hacer backup antes de ejecutar migración
|
||||
2. **Orden de deployment**:
|
||||
- Backend primero (migración + código)
|
||||
- Frontend después
|
||||
3. **Validar**: Probar login con cada tipo de usuario después de migrar
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
```bash
|
||||
# 1. Probar login con admin
|
||||
curl -X POST http://localhost:8000/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username": "admin", "password": "admin123"}'
|
||||
|
||||
# 2. Verificar que el response incluye role object
|
||||
# Debe tener: role: { id: 1, name: 'administrador', ... }
|
||||
|
||||
# 3. Probar permisos
|
||||
curl -X GET http://localhost:8000/api/users \
|
||||
-H "Authorization: Bearer {token}"
|
||||
# Debe funcionar para admin, fallar para mecanico
|
||||
```
|
||||
|
||||
## 📝 Notas
|
||||
|
||||
- Los 3 roles predefinidos (id 1, 2, 3) no se pueden eliminar ni editar
|
||||
- Nuevos roles personalizados pueden crearse con id > 3
|
||||
- La migración es irreversible (elimina columna `role`)
|
||||
- Usuarios sin `role_id` después de migración se asignan automáticamente a "mecanico"
|
||||
Reference in New Issue
Block a user