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