Added Cambios Permisos y Modulos

This commit is contained in:
fjrodriguez
2023-11-13 11:45:10 -06:00
parent ac80bf6a45
commit 61cf354a79
13 changed files with 772 additions and 49 deletions

111
IMMEX/permissions.py Normal file
View File

@@ -0,0 +1,111 @@
from rest_framework.permissions import BasePermission
from .models import ActiveTokenSession,Sistemas_por_cliente_A24,SuspensionModulo
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','')
modulo = request.META.get('HTTP_MODULO','')
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}'
return False
modulo_ids = sistema_cliente.suspension_modulos_permisos_cliente_set.filter(suspensionmodulo__modulo__nombre=modulo).first()
if modulo_ids is None:
self.message +=f";El modulo:{modulo}, no se encuentra dado de alta para el RFC:{RFC} enviado"
return False
for modulo in modulo_ids.suspensionmodulo_set.filter(modulo__nombre=modulo):
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}'
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)
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"
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
active_session.last_time=timezone.now()
active_session.has_expired =True if expiro else False
active_session.save()
return False if expiro else True
class ActiveTokenSessionPerm(BasePermission):
message = 'NO'
def has_permission(self,request, view):
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'
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
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):
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