esta todo ok
This commit is contained in:
67
backend/update_permissions.py
Normal file
67
backend/update_permissions.py
Normal 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()
|
||||
Reference in New Issue
Block a user