Пример #1
0
 def __init__(self):
     self.permisoCrud= PermisoCrud()
     self.grupoPermisoCrud= GrupoPermisoCrud()
     self.personaPermisoCrud= PersonaPermisoCrud()
     self.grupoCrud=GrupoCrud()
     self.personaCrud= PersonaCrud()
Пример #2
0
class PermisoServicios:

    def __init__(self):
        self.permisoCrud= PermisoCrud()
        self.grupoPermisoCrud= GrupoPermisoCrud()
        self.personaPermisoCrud= PersonaPermisoCrud()
        self.grupoCrud=GrupoCrud()
        self.personaCrud= PersonaCrud()

# region Servicios Basicos
    def get(self, id):
        return self.permisoCrud.readId(id)

    def getAll(self):
        return self.permisoCrud.readAll()

    def getDTO(self, permiso):
        permisoDTO= PermisoDTO(permiso)
        return permisoDTO.toJSON()

    def insert(self, permiso):
        return self.permisoCrud.create(permiso)

    def update(self, permiso):
        return self.permisoCrud.update(permiso)

    def delete(self, permiso):
        return self.permisoCrud.delete(permiso)
# endregion

    def listar(self):
        permisos = Permiso.objects.all()
        return  permisos

    def getPermisoByUserAndUrl(self, user, path):
        """
        Método que verifica si un usuario tiene relacionado un permiso ya sea por grupo o por usuario. Realiza una
        búsqueda hacia arriba buscando en los padres aplanando la autorización.
        :param userId: Usuario en sesión.
        :param path: url del método a ingresar
        :return: Permiso asociado.
        """
        permiso= self.permisoCrud.whereObject(path=path)
        usuario= self.personaCrud.whereObject(usuario=user)

        perm = self.personaPermisoCrud.whereList(permiso=permiso, usuario=usuario)

        #Si no se encuentra aplanado se busca en los padres.
        if not perm :
            while permiso.parent is not None:
                permiso=permiso.parent
                perm = self.personaPermisoCrud.whereList(permiso=permiso, usuario=usuario)
                if not perm:
                    break

        #Si al finalizar en los padres no encuentra continua buscando en los grupos.
        if not perm:
            permiso= self.permisoCrud.whereObject(path=path)
            grupos= self.grupoCrud.whereList(personas=usuario)
            perm= self.grupoPermisoCrud.whereList(grupo__in=grupos, permiso=permiso)

            while permiso.parent is not None:
                permiso=permiso.parent
                perm= self.grupoPermisoCrud.whereList(grupo__in=grupos, permiso=permiso)
                if not perm:
                    break

        return perm