esta todo ok

This commit is contained in:
2025-11-19 11:33:57 -03:00
parent 4670366ffc
commit 57ad12754f
7 changed files with 550 additions and 8 deletions

View File

@@ -0,0 +1,67 @@
"""
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()