Actualizaciones API/IMMEX

This commit is contained in:
fjrodriguez
2024-01-12 10:15:04 -06:00
parent 607790896b
commit 729fa47aae
8 changed files with 346 additions and 120 deletions

View File

@@ -437,7 +437,7 @@ class CancelaTimbre(APIView):
except Exception as ex:
msn = f'UUID:{UUID} \nCliente:{rfcc} \n {str(ex)}'
BitacoraErrores.objects.create(level=2, message=msn, traceback=traceback.format_exc(), view='Sistemas.CancelaTimbre')
return Response({'Error':f'{ex}','isError':True})
return Response({'Error':f'{ex}','isError':True}, status=status.HTTP_200_OK)
def get(self,request,*args, **kwargs):
uuid=request.query_params.get('uuid',None)

View File

@@ -75,6 +75,7 @@ class ActiveTokenSession(models.Model):
def is_expired(self, expiration_minutes):
expiration_time = self.start_time + timezone.timedelta(minutes=expiration_minutes)
return expiration_time < timezone.now()

View File

@@ -6,7 +6,7 @@ from django.utils import timezone
class TokenCheckSession(BasePermission):
message = 'NO'
def has_permission(self,request, view):
print('FROM TokenCheckSession : ')
sistema = request.META.get('HTTP_SISTEMA','')
mac = request.META.get('HTTP_MAC','')
RFC = request.META.get('HTTP_RFC','')
@@ -15,6 +15,7 @@ class TokenCheckSession(BasePermission):
permiso= request.META.get('HTTP_PERMISO','')
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
sistema_cliente = Sistemas_por_cliente_A24.objects.filter(id_sistema__nombre_sistema=sistema,cliente__RFC=RFC).first()
if sistema_cliente is None:
self.message +=f';El sistema:{sistema}, no se encuentra dado de alta para el RFC:{RFC}'
@@ -29,30 +30,36 @@ class TokenCheckSession(BasePermission):
if modulo.suspendido:
self.message +=f';El modulo:{modulo} se encuentra suspendido para el RFC:{RFC}'
return False
if modulo.suspensionpermiso_set.filter(permiso__nombre=permiso).first() is None:
self.message += f';El permiso:{permiso} en el modulo:{modulo} no esta dado de alta para el RFC:{RFC}'
if modulo.modulo.suspensionpermiso_set.filter(permiso__nombre=permiso).first() is None :
self.message+=f";El Permiso:{permiso} no se encuentra en el modulo"
return False
#Validacion para revisar los datos del device que envian con otro Token
#en este caso revisa el nombre del sistemma. se pueden agregar mas filtros
if active_session.token.devicea24_set.filter(sistema__nombre_sistema=sistema).first() is None:
self.message+=";El Dispositivo no coicide con los datos enviados"
return False
inner_sistema = active_session.token.devicea24_set.first().sistema.nombre_sistema == sistema
inner_mac = active_session.token.devicea24_set.first().MAC == mac
expiro = active_session.is_expired(1)
#se cambia el tiempo en minutos para verificar si ya expiro
#aumentar si se desea dar mas tiempo
expiro = active_session.is_expired(50)
if not (inner_sistema and inner_mac):
self.message+=";no se agregó código de máquina y/o sistema correctamente"
if expiro:
self.message+=";la session expiro"
self.message+=";la session expiro;logeese nuevamente"
if active_session.token.devicea24_set.first() is None:
self.message +=';Device not Found'
return False
#print(expiro , inner_sistema , inner_mac)
if not (inner_sistema and inner_mac):
self.message+=";no se agregó código de máquina y/o sistema correctamente"
return False
#actualizas y salvas si la session expiro
active_session.last_time=timezone.now()
active_session.has_expired =True if expiro else False
active_session.save()
@@ -66,46 +73,69 @@ class ActiveTokenSessionPerm(BasePermission):
authorization = request.META.get('HTTP_AUTHORIZATION','')
sistema = request.META.get('HTTP_SISTEMA','')
mac = request.META.get('HTTP_MAC','')
if 'Token' in authorization:
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
#print(active_session.is_expired(1))
#verifica que este el DeviceA24 dado de alta
if active_session.token.devicea24_set.first() is None:
self.message +=';Device not Found'
#Solo se checa para el methodo GET para aplicaciones clarion para que no envie el body
#
if request.method=='GET':
if not mac:
self.message +=';No se proporciono MAC o codigo maquina en headers'
return False
#print(active_session.token.devicea24_set.first().sistema.nombre_sistema)
inner_mac = active_session.token.devicea24_set.first().MAC
if mac != inner_mac:
self.message +=f';El Codigo de maquina `{mac}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_mac}`'
if not sistema:
self.message +=';No se proporciono sistema en headers'
return False
if 'Token' in authorization :
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
user=active_session.token.user #valida el usuario antes que todo para no crear sessiones innecesarias con superadmins
if user.is_superuser or user.is_staff or user.groups.filter(name='admin').exists():
return True
#verifica que este el DeviceA24 dado de alta
if active_session.token.devicea24_set.first() is None:
self.message +=';Device not Found'
return False
#print(active_session.token.devicea24_set.first().sistema.nombre_sistema)
inner_mac = active_session.token.devicea24_set.first().MAC
if mac != inner_mac:
self.message +=f';El Codigo de maquina `{mac}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_mac}`'
return False
inner_sistema= active_session.token.devicea24_set.first().sistema.nombre_sistema
if sistema != inner_sistema:
self.message +=f';El Sistema `{sistema}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_sistema}`'
return False
inner_sistema= active_session.token.devicea24_set.first().sistema.nombre_sistema
if sistema != inner_sistema:
self.message +=f';El Sistema `{sistema}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_sistema}`'
return False
if created: #si el registro es recien creado la session es valida
return True
#si la session esta expidara la renueva
if active_session.has_expired:#is_expired(50):
active_session.start_time = timezone.now()
active_session.last_time=timezone.now()
active_session.has_expired =False
active_session.save()
if created: #si el registro es recien creado la session es valida
return True
#si la session esta expidara la renueva
print('expirooo',active_session.is_expired(1))
if active_session.is_expired(1):
# if active_session.has_expired:
# self.message += ';La Session ha expidado'
# return False
# else:
# active_session.last_time=timezone.now()
# active_session.save()
# return True
# si no encuentra el Header[Authorization] con Token no deja entrar
#se espera que se envie el body con user y password
else:
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
if active_session.has_expired:#is_expired(50):
active_session.start_time = timezone.now()
active_session.last_time=timezone.now()
active_session.has_expired =False
active_session.save()
return True
# if active_session.has_expired:
# self.message += ';La Session ha expidado'
# return False
# else:
# active_session.last_time=timezone.now()
# active_session.save()
# return True
# si no encuentra el Header[Authorization] con Token no deja entrar
return False

View File

@@ -1,16 +1,22 @@
from rest_framework import serializers
from rest_framework.validators import ValidationError
from django.contrib.auth import get_user_model
from allauth.account.models import EmailAddress
from django.contrib.auth.models import Permission
from django.contrib.auth.models import Permission, User
from Sistemas.models import Sistema
from .models import ClientesA24, Sistemas_por_cliente_A24, DeviceA24,Modulo
from .models import ClientesA24, Sistemas_por_cliente_A24, DeviceA24,Modulo, Permisos_A24
class CustomPermissionSerializer(serializers.ModelSerializer):
activo = serializers.BooleanField(read_only=True)
# user_id = serializers.SerializerMethodField()
class Meta:
model = Permission
fields = '__all__'
def get_user_id(self, obj):
# Obtenemos el ID del usuario asociado al permiso si existe
user = User.objects.filter(user_permissions=obj).first()
return user.id if user else None
class ModulosSerializer(serializers.ModelSerializer):
class Meta:
@@ -18,6 +24,57 @@ class ModulosSerializer(serializers.ModelSerializer):
fields = '__all__'
depth =1
def create(self, validated_data):
"""Se recive el json completo para poder tomar los permisos """
try:
permisos_data= self.context.get('request').data.get('permisos', [])
modulo = super(ModulosSerializer,self).create(validated_data)
for permiso_id in permisos_data:
permiso, created= Permisos_A24.objects.get_or_create(pk=permiso_id,\
defaults={'nombre': f'{modulo.nombre}_{permiso_id}'})
modulo.permisos.add(permiso)
return modulo
except Exception as e:
raise ValidationError({'error':str(e)})
class Permisos_A24_Serializer(serializers.ModelSerializer):
modulo = serializers.CharField(write_only=True, required=False)
modulos = serializers.SerializerMethodField()
class Meta:
model = Permisos_A24
fields = ['id','nombre',
'modulo',
'modulos']
def create(self,validated_data):
""""""
try:
modulo_nombre = validated_data.pop('modulo',None)
permiso = super(Permisos_A24_Serializer, self).create(validated_data)
if modulo_nombre:
modulo, created = Modulo.objects.get_or_create(nombre=modulo_nombre, \
defaults={'nombre':modulo_nombre})
modulo.permisos.add(permiso)
permiso.modulo = modulo.nombre
return permiso
except Exception as e:
raise ValidationError({'error':str(e)})
def to_representation(self, instance):
representation = super(Permisos_A24_Serializer, self).to_representation(instance)
# Agregar el atributo 'modulo' al JSON de respuesta si está presente
if hasattr(instance, 'modulo') and instance.modulo:
representation['modulo'] = instance.modulo
return representation
def get_modulos(self, obj):
# Obtener la lista de nombres de los módulos a los que está asignado el permiso
return list(obj.modulo_set.values_list('nombre', flat=True))
class Sistema_A24_PKRF(serializers.PrimaryKeyRelatedField):
def to_internal_value(self,data):
try:
@@ -54,6 +111,11 @@ class ClientesA24Serailizer(serializers.ModelSerializer):
class DeviceA24_admin_Serialiazer(serializers.ModelSerializer):
clienteA24 = serializers.SerializerMethodField()
sistema = serializers.SerializerMethodField()
deviceName = serializers.CharField(required=True)
deviceOS= serializers.CharField(required=False)
deviceIP = serializers.CharField(required=False)
username = serializers.CharField(required=False)
dataBase = serializers.CharField(required=True)
class Meta:
model = DeviceA24
@@ -65,6 +127,7 @@ class DeviceA24_admin_Serialiazer(serializers.ModelSerializer):
return obj.sistema.nombre_sistema if obj.sistema.nombre_sistema else ""
class SerialiazerA24(serializers.ModelSerializer):
clienteA24 = ClientA24_PKRF(queryset=ClientesA24.objects.all())
sistema = Sistema_A24_PKRF(queryset=Sistema.objects.all())

View File

@@ -6,6 +6,7 @@ from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'permisos', views.PermissionListCreateAPIView)
router.register(r'modulos',views.ModulosListCreateAPIView)
router.register(r'permisosA24',views.Permisos_A24_ModelViewSet)
urlpatterns = [
path('', views.Sistemas_xCliente_IMMEX_ListView.as_view(), name='sistemasXcli_IMMEX'),

View File

@@ -6,7 +6,7 @@ from django.core.mail import send_mail
from django.views.generic.edit import CreateView
from django.views.generic.list import ListView
from django.contrib import messages
from django.db.models import Case, When, Value, BooleanField
from django.db.models import Case, When, Value, BooleanField,Q
from django.contrib.auth.models import Permission, User
from django.contrib.contenttypes.models import ContentType
@@ -34,14 +34,14 @@ from allauth.account.forms import SignupForm
# Imports de tus modelos y serializadores
from .permissions import ActiveTokenSessionPerm, TokenCheckSession
from .models import Sistemas_por_cliente_A24, ClientesA24, DeviceA24, ActiveTokenSession, Modulo
from .models import Sistemas_por_cliente_A24, ClientesA24, DeviceA24, ActiveTokenSession, Modulo, Permisos_A24
from Sistemas.models import Sistema, BitacoraErrores
from Sistemas.permissions import ItsAdminToken, HasAuthorizationHeader, CheckPermiso
from .forms import ClienteForm_IMMEX
from .serializers import (ClientesA24Serailizer, SerialiazerA24, SignupSerializer,
Sistema_Serializer, Sistema_Por_Cliente_Serializer,
DeviceA24_admin_Serialiazer, CustomPermissionSerializer,
ModulosSerializer
ModulosSerializer, Permisos_A24_Serializer
)
@@ -109,7 +109,7 @@ class ChecarPermisos(APIView):
permission_classes = [IsAuthenticated, HasAuthorizationHeader, TokenCheckSession]
def get(self,request):
if 'Response-Type' not in request.headers:
Response({"ACCESO":"OK"})
return Response({"ACCESO":"OK"})
else:
ct= request.headers['Response-Type']
response = Response("ACCESS:OK", content_type=ct)
@@ -158,6 +158,7 @@ class LoginIMMEX(APIView):
class RegistroUsuarios(APIView):
"""Este API point se usa para los registos de utileriaas"""
authentication_classes = (BasicAuthentication, TokenAuthentication, )
permission_classes=[IsAuthenticated,ItsAdminToken]
@@ -314,7 +315,13 @@ class Sistemas_IMMEX_List_APIView(APIView):
permission_classes=[IsAuthenticated]
def get(self, request):
sistemas = Sistema.objects.all()
nombre_sistema = request.query_params.get('nombre_sistema',None)
if nombre_sistema:
sistemas = Sistema.objects.filter(nombre_sistema=nombre_sistema)
else:
sistemas = Sistema.objects.all()
serializer = Sistema_Serializer(sistemas,many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@@ -348,7 +355,6 @@ class Sistema_por_cliente_APIView(APIView):
del item['cliente']
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request):
try:
context = {
@@ -370,9 +376,9 @@ class Sistema_por_cliente_APIView(APIView):
view='IMMEX.Sistema_por_cliente_APIView')
return Response({'Error':f'{ex}','isError':True}, status=status.HTTP_200_OK)
#CRUD Clientes IMMEX
#CRUD Clientes IMMEX (APP de WINDEV 27)
class MyPage(PageNumberPagination):
page_size =1
page_size =100
page_size_query_param = 'page_size'
max_page_size = 1
@@ -381,8 +387,6 @@ class ClientesA24List(generics.ListCreateAPIView):
authentication_classes = (BasicAuthentication, TokenAuthentication, )
permission_classes=[ItsAdminToken]
queryset = ClientesA24.objects.all()
serializer_class = ClientesA24Serailizer
pagination_class = MyPage
@@ -419,29 +423,55 @@ class ClientesA24Detail(APIView):
# Obtener un cliente por ID (GET)
def get(self, request, pk):
print(request.headers)
cliente = self.get_object(pk)
serializer = ClientesA24Serailizer(cliente)
return Response(serializer.data)
try:
cliente = self.get_object(pk)
serializer = ClientesA24Serailizer(cliente)
return Response(serializer.data)
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.ClientesA24Detail.get')
return Response(data_json,status=status.HTTP_200_OK)
# Actualizar un cliente por ID (PUT)
def put(self, request, pk):
cliente = self.get_object(pk)
print(cliente)
serializer = ClientesA24Serailizer(cliente, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
try:
cliente = self.get_object(pk)
serializer = ClientesA24Serailizer(cliente, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.ClientesA24Detail.put')
return Response(data_json,status=status.HTTP_200_OK)
# Eliminar un cliente por ID (DELETE)
def delete(self, request, pk):
cliente = self.get_object(pk)
cliente.delete()
return Response({"pk":pk},status=status.HTTP_200_OK)
try:
cliente = self.get_object(pk)
cliente.delete()
return Response({"pk":pk},status=status.HTTP_200_OK)
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.ClientesA24Detail.delete')
return Response(data_json,status=status.HTTP_200_OK)
#-----ADMIN AREA
class DeviceA24List(generics.ListCreateAPIView):
class DeviceA24List(generics.ListAPIView):
#queryset = DeviceA24.objects.all()
serializer_class = DeviceA24_admin_Serialiazer
pagination_class = MyPage
@@ -449,22 +479,29 @@ class DeviceA24List(generics.ListCreateAPIView):
authentication_classes = (BasicAuthentication, TokenAuthentication, )
permission_classes=[ ItsAdminToken]
def get_queryset(self):
queryset = DeviceA24.objects.all()
# Filtrar por clienteA24 si se proporciona como parámetro de consulta
clienteA24 = self.request.query_params.get('clienteA24')
try:
queryset = DeviceA24.objects.all()
# Filtrar por clienteA24 si se proporciona como parámetro de consulta
clienteA24 = self.request.query_params.get('clienteA24')
if clienteA24:
queryset = queryset.filter(clienteA24__RFC__icontains=clienteA24)
# # Aplicar ordenación si se proporciona como parámetro de consulta
# ordering = self.request.query_params.get('ordering')
if clienteA24:
queryset = queryset.filter(clienteA24__RFC__icontains=clienteA24)
# if ordering:
# queryset = queryset.order_by(ordering)
# # Aplicar ordenación si se proporciona como parámetro de consulta
# ordering = self.request.query_params.get('ordering')
return queryset
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.DeviceA24List')
return Response(data_json,status=status.HTTP_200_OK)
# if ordering:
# queryset = queryset.order_by(ordering)
return queryset
class DeviceA24Detail(generics.RetrieveUpdateDestroyAPIView):
queryset = DeviceA24.objects.all()
@@ -474,23 +511,59 @@ class DeviceA24Detail(generics.RetrieveUpdateDestroyAPIView):
# Método para recuperar un registro
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
try:
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.DeviceA24Detail.retrieve')
return Response(data_json,status=status.HTTP_200_OK)
# Método para actualizar un registro
def update(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
try:
instance = self.get_object()
data=request.data
#si se desea agregar o quitar campos excluded se tiene que cambiar el required=False de su campo serializer
excluded_fields = ['id','clienteA24','sistema','username','timestamp','token']
for field in excluded_fields:
if field in data:
data.pop(field)
serializer = self.get_serializer(instance, data=data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.DeviceA24Detail.update')
return Response(data_json,status=status.HTTP_200_OK)
# Método para eliminar un registro
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.delete()
return Response(status=204)
#solo se elimina la instancia de deviceA24.
# #se puede agregar un query parameter para eliminar todo el User (pendiente)
try:
instance = self.get_object()
instance.delete()
return Response(status=204)
except Exception as ex:
error_message ={'Error':str(ex), 'isError':True}
data_json = json.dumps(error_message)
BitacoraErrores.objects.create(level=2, message=ex,\
traceback=traceback.format_exc(),\
view='IMMEX.DeviceA24Detail.destroy')
return Response(data_json,status=status.HTTP_200_OK)
# Método para listar registros (opcional, dependiendo de tus necesidades)
def list(self, request, *args, **kwargs):
@@ -498,6 +571,7 @@ class DeviceA24Detail(generics.RetrieveUpdateDestroyAPIView):
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
class PermissionListCreateAPIView(viewsets.ModelViewSet):
queryset = Permission.objects.all()
# Asegúrate de tener un serializer adecuado
@@ -506,35 +580,38 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
authentication_classes = (BasicAuthentication, TokenAuthentication, )
permission_classes=[ ItsAdminToken]
def get_queryset(self):
app_label = self.request.query_params.get('app_label')
user_id = self.request.query_params.get('user_id')
queryset = Permission.objects.all()
print('TODOS',queryset.count())
if app_label:
content_types = ContentType.objects.filter(app_label=app_label)
queryset = queryset.filter(content_type__in=content_types)
print('app',queryset.count())
if user_id:
param_user = User.objects.get(id=user_id)
# Anotamos los permisos con True si el usuario los tiene, False en caso contrario
queryset = queryset.annotate(
activo=Case(
When(user=param_user, then=Value(True)),
default=Value(False),
output_field=BooleanField()
)
)
# Anotamos los permisos con True si el usuario los tiene, False en caso contrario
# queryset = queryset.annotate(
# activo=Case(
# When(user=param_user, then=Value(True)),
# default=Value(False),
# output_field=BooleanField()
# )
# )
user_permissions = param_user.user_permissions.all()
queryset = queryset.filter(Q(pk__in=user_permissions))
print('user',queryset.count())
return queryset
def list(self, request, *args, **kwargs):
# Obtén la lista de permisos
"""Obtén la lista de permisos"""
queryset = self.get_queryset()
if not self.request.query_params.get('user_id'):
data={"error":"favor de proporcionar el 'user_id' en los query params, en este caso solo para el GET"}
return Response(data,status=status.HTTP_200_OK)
serializer = self.get_serializer(queryset, many=True)
# Agrega datos personalizados a la respuesta
@@ -547,7 +624,9 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
return Response(data, status=status.HTTP_200_OK)
def create(self, request, *args, **kwargs):
# Obtén el ID del usuario del JSON de la solicitud
""" Obtén el ID del usuario del JSON de la solicitud GET
en esste metodo se tiene que agregar el user_id required
"""
user_id = request.data.get('user_id')
try:
@@ -556,7 +635,7 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
# Obtén la lista de permisos del JSON de la solicitud
permissions_data = request.data.get('permissions', [])
print('permissions_data',permissions_data)
for perm_data in permissions_data:
# Recupera el ID del permiso de cada objeto en la lista
permission_id = perm_data.get('id')
@@ -575,10 +654,54 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
return Response({"error": "El usuario no existe"}, status=status.HTTP_400_BAD_REQUEST)
class ModulosListCreateAPIView(viewsets.ModelViewSet):
""""""
queryset = Modulo.objects.all()
pagination_class = MyPage
serializer_class = ModulosSerializer
authentication_classes = (BasicAuthentication, TokenAuthentication, )
permission_classes=[ ItsAdminToken]
def get_queryset(self):
""""""
queryset = Modulo.objects.all()
return queryset
def create(self, request, *args, **kwargs):
"""se define el create para poder enviar el request.data
ya que de forma default en la clase viewset no se envia el request.data"""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class Permisos_A24_ModelViewSet(viewsets.ModelViewSet):
""""""
queryset = Permisos_A24.objects.all()
pagination_class = MyPage
serializer_class = Permisos_A24_Serializer
authentication_classes = (BasicAuthentication, TokenAuthentication, )
permission_classes=[ ItsAdminToken]
def get_queryset(self):
""""""
permiso = self.request.query_params.get('permiso')
queryset = super(Permisos_A24_ModelViewSet, self).get_queryset()
if permiso:
queryset = queryset.filter(nombre=permiso)
return queryset
def create(self, request, *args, **kwargs):
"""se agrego explicitamente el create para poder manejar el serializador
si es que se necesita enviar el modulo y asginar lo """
serializer = self.get_serializer(data=request.data.get('permisos', []), many=True)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data,status=status.HTTP_201_CREATED, headers=headers)
# def update(self,request,*args,**kwargs):
# pk=

View File

@@ -47,10 +47,18 @@
<li class="nav-item {% if 'sistemas' in request_path %}active border{% endif %}">
<a class="nav-link" href="/sistemas" >Sistemas CFDI</a>
</li>
<li class="nav-item {% if 'IMMEX' in request_path %}active border{% endif %}">
<li class="nav-item {% if 'IMMEX/' in request_path %}active border{% endif %}">
<a class="nav-link" href="{% url 'sistemasXcli_IMMEX' %}" >Sistemas IMMEX</a>
</li>
{% for group in request.user.groups.all %}
{% if group.name == 'admin_soft' %}
<li class="nav-item {% if 'IMMEX/permisos-clientes' in request_path %}active border{% endif %}">
<a class="nav-link" href="{% url 'permisos-clientesModulos' %}" >Modulos-Permisos</a>
</li>
{% endif %}
{% endfor %}
{% if request.user.is_superuser %}
<li class="nav-item">
<a class="nav-link" href="/admin" target="_blank">Admin site</a>