Files
checklist/backend/update_permissions.py
2025-11-19 11:33:57 -03:00

68 lines
3.1 KiB
Python

"""
Script para actualizar automáticamente las verificaciones de permisos en main.py
Reemplaza las verificaciones de role string por verificaciones basadas en permisos
"""
import re
def update_permissions():
with open('app/main.py', 'r', encoding='utf-8') as f:
content = f.read()
# Mapa de reemplazos: patrón -> reemplazo
replacements = [
# Gestión de usuarios
(
r'if current_user\.role != "admin":\s+raise HTTPException\(status_code=403, detail="No tienes permisos para ver usuarios"\)',
'require_permission(current_user, "can_manage_users")'
),
(
r'if current_user\.role != "admin":\s+raise HTTPException\(status_code=403, detail="No tienes permisos.*usuarios?"\)',
'require_permission(current_user, "can_manage_users")'
),
# Gestión de checklists
(
r'if current_user\.role != "admin":\s+raise HTTPException\(status_code=403, detail=".*checklist.*"\)',
'require_permission(current_user, "can_manage_checklists")'
),
# Desactivar inspecciones
(
r'if current_user\.role != "admin":\s+raise HTTPException\(status_code=403, detail=".*inactivar.*inspecc.*"\)',
'require_permission(current_user, "can_deactivate_inspections")'
),
# Ver todas las inspecciones (mechanic filter)
(
r'if current_user\.role == "mechanic":\s+query = query\.filter\(models\.Inspection\.mechanic_id == current_user\.id\)',
'if not has_permission(current_user, "can_view_all_inspections"):\n query = query.filter(models.Inspection.mechanic_id == current_user.id)'
),
# Crear inspecciones
(
r'# Crear usuario\s+hashed_password = get_password_hash\(user\.password\)\s+db_user = models\.User\(\s+username=user\.username,\s+email=user\.email,\s+full_name=user\.full_name,\s+role=user\.role,',
'# Crear usuario\n hashed_password = get_password_hash(user.password)\n db_user = models.User(\n username=user.username,\n email=user.email,\n full_name=user.full_name,\n role_id=user.role_id,'
),
]
# Aplicar reemplazos
for pattern, replacement in replacements:
content = re.sub(pattern, replacement, content, flags=re.MULTILINE | re.DOTALL)
# Reemplazos específicos adicionales
# Cambiar role por role_id en UserUpdate
content = content.replace(
'if user_update.role is not None:\n if current_user.role != "admin":\n raise HTTPException(status_code=403, detail="No tienes permisos para cambiar roles")\n db_user.role = user_update.role',
'if user_update.role_id is not None:\n require_permission(current_user, "can_manage_roles")\n db_user.role_id = user_update.role_id'
)
with open('app/main.py', 'w', encoding='utf-8') as f:
f.write(content)
print("✅ Archivo main.py actualizado con sistema de permisos")
print("⚠️ Revisar manualmente y ajustar según sea necesario")
if __name__ == "__main__":
update_permissions()