68 lines
3.1 KiB
Python
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()
|