se filtran lineas si usuario no es superuser

francisco/photos
Francisco Sandoval 2024-01-08 21:08:31 -03:00
parent 840f0449d6
commit 9d1507f445
2 changed files with 22 additions and 6 deletions

View File

@ -5,7 +5,8 @@ from rest_framework.decorators import action, api_view
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from django.db import connection from django.db import connection
from .. import models, serializers from .. import models, serializers
from django.http import JsonResponse from django.http import JsonResponse, HttpResponse
from django.forms.models import model_to_dict
from os import getenv from os import getenv
import redis import redis
import json import json
@ -18,6 +19,19 @@ class LineaViewSet(viewsets.ModelViewSet):
filter_backends = [DjangoFilterBackend] filter_backends = [DjangoFilterBackend]
filterset_fields = ['id_operador', 'route_short_name', 'route_long_name', 'vigente'] filterset_fields = ['id_operador', 'route_short_name', 'route_long_name', 'vigente']
def list(self, request, pk=None, *args, **kwargs):
login = request.jwt_info['login']
usuario = models.Usuario.objects.filter(login=login).first()
if usuario.superuser == False:
rol_lineas = models.RolLinea.objects.filter(id_rol=usuario.id_rol)
lineas = []
for row in rol_lineas:
lineas.append(model_to_dict(row.id_linea))
return JsonResponse(lineas, safe=False)
else:
return super().list(request, pk, *args, **kwargs)
@action(detail=False, methods=['get']) @action(detail=False, methods=['get'])
def proto(self, request, pk=None): def proto(self, request, pk=None):

View File

@ -160,15 +160,20 @@ class UsuarioViewSet(viewsets.ModelViewSet):
login = request.jwt_info['login'] login = request.jwt_info['login']
usuario = models.Usuario.objects.filter(login=login).first() usuario = models.Usuario.objects.filter(login=login).first()
escritura = usuario.superuser
if 'path' in input: if 'path' in input:
path = input.get('path') path = input.get('path')
aplicacion = models.Aplicacion.objects.filter(path_app=path).first() aplicacion = models.Aplicacion.objects.filter(path_app=path).first()
rol_aplicacion = models.RolAplicacion.objects.filter(id_rol=usuario.id_rol, id_aplicacion=aplicacion.id_aplicacion).first()
if escritura == False:
rol_aplicacion = models.RolAplicacion.objects.filter(id_rol=usuario.id_rol, id_aplicacion=aplicacion.id_aplicacion).first()
escritura = rol_aplicacion.solo_visualizar == False
return JsonResponse({ return JsonResponse({
'path_app': path, 'path_app': path,
'nombre_app': aplicacion.nombre_app, 'nombre_app': aplicacion.nombre_app,
'escritura': rol_aplicacion.solo_visualizar == False 'escritura': escritura
}) })
else: else:
registros = models.RolAplicacion.objects.filter(id_rol=usuario.id_rol) registros = models.RolAplicacion.objects.filter(id_rol=usuario.id_rol)
@ -176,9 +181,6 @@ class UsuarioViewSet(viewsets.ModelViewSet):
for registro in registros: for registro in registros:
if registro.id_aplicacion.vigente: if registro.id_aplicacion.vigente:
rol_app = models.RolAplicacion.objects.filter(id_rol=registro.id_rol, id_aplicacion=registro.id_aplicacion).first() rol_app = models.RolAplicacion.objects.filter(id_rol=registro.id_rol, id_aplicacion=registro.id_aplicacion).first()
escritura = True
if rol_app != None:
escritura = rol_app.solo_visualizar != True
aplicaciones.append({ aplicaciones.append({
'path_app': registro.id_aplicacion.path_app, 'path_app': registro.id_aplicacion.path_app,