def is_staff_cuerpo(self):
     # Si el usuario tiene un rol significa que trabaja en la JNB
     if self.rol:
         return False
         
     cargo_ids = [cargo.webservice_id for cargo in self.cargos.all()]
     
     # Para que el usuario sea considerado staff de cuerpo alguno de sus cargos
     # tiene que estar en el listado de cargos con permisos en el sistema.
     return intersect(cargo_ids, settings.CARGOS_CUERPO.values())
        def wrap(request, *args, **kwargs):
            # If it is the superuser, allow everything
            if request.user.is_superuser:
                return func(request, *args, **kwargs)    
        
            # If user isn't authenticated
            if not request.user.is_authenticated():
                log(u'Usuario no autenticado intentó acceder al sistema')
                request.flash['notice'] = u'Por favor inicie sesión primero'
                return redirect('login')
                
            user_cargo_ids = [cargo.webservice_id for cargo in request.user.get_profile().cargos.all()]
                
            # If the user role is not in allowed roles, deny
            if not request.user.get_profile().rol in self.roles and not intersect(user_cargo_ids, self.cargos):
                log(u'Usuario autenticado intentó acceder a sección no permitida del sistema')
                request.flash['error'] = u'Error de acceso'
                return redirect('index')

            return func(request, *args, **kwargs)