From d285f26152014feab6c64ad1bc9ab3047bd278b7 Mon Sep 17 00:00:00 2001 From: Sylvain Le Bon <sylvain@happy-dev.fr> Date: Fri, 2 Nov 2018 16:07:00 +0100 Subject: [PATCH] bugfix: allow filtering of models that don't have view permissions --- djangoldp/views.py | 16 +++++++++------- setup.py | 3 +-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/djangoldp/views.py b/djangoldp/views.py index 64986a91..b5637354 100644 --- a/djangoldp/views.py +++ b/djangoldp/views.py @@ -8,6 +8,7 @@ from django.db.utils import OperationalError from django.shortcuts import get_object_or_404 from django.utils.decorators import classonlymethod from rest_framework.authentication import SessionAuthentication +from rest_framework.filters import BaseFilterBackend from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser from rest_framework.permissions import DjangoObjectPermissions @@ -15,10 +16,7 @@ from rest_framework.viewsets import ModelViewSet from .models import LDPSource from .serializers import LDPSerializer from guardian.shortcuts import get_objects_for_user -from rest_framework_guardian import filters -def debug(req): - import pdb; pdb.set_trace() class JSONLDRenderer(JSONRenderer): media_type = 'application/ld+json' @@ -50,6 +48,11 @@ class WACPermissions(DjangoObjectPermissions): class AnnonReadOnly(WACPermissions): authenticated_users_only = False +class DjangoObjectPermissionsFilter(BaseFilterBackend): + def filter_queryset(self, request, queryset, view): + perm="view_{}".format(queryset.model._meta.model_name.lower()) + return get_objects_for_user(request.user, perm, klass=queryset.model) + class LDPViewSetGenerator(ModelViewSet): """An extension of ModelViewSet that generates automatically URLs for the model""" model = None @@ -103,7 +106,7 @@ class LDPViewSet(LDPViewSetGenerator): parser_classes = (JSONLDParser, ) authentication_classes = (NoCSRFAuthentication,) permission_classes = (WACPermissions,) - filter_backends = (filters.DjangoObjectPermissionsFilter,) + filter_backends = (DjangoObjectPermissionsFilter,) def __init__(self, **kwargs): super().__init__(**kwargs) @@ -128,9 +131,8 @@ class LDPViewSet(LDPViewSetGenerator): def get_queryset(self, *args, **kwargs): if self.model: - perm=".view_".join((self.model._meta.app_label, self.model._meta.model_name)) - # return self.model.objects.all() # - return get_objects_for_user(self.request.user,perm) + perm="view_{}".format(self.model._meta.model_name.lower()) + return get_objects_for_user(self.request.user, perm, klass=self.model) else: return super(LDPView, self).get_queryset(*args, **kwargs) diff --git a/setup.py b/setup.py index be02ef2d..a73cbeb2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name='djangoldp', - version='0.5a5', + version='0.5a7', url='https://git.happy-dev.fr/happy-dev/djangoldp/', author="Startin'blox", author_email='sylvain@happy-dev.fr', @@ -16,6 +16,5 @@ setup( 'django_rest_framework', 'pyld', 'django-guardian', - 'djangorestframework-guardian' ], ) -- GitLab