diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index bcb5f119535086de2e89955205a5d7d75fa2dcb0..e3573f0075e1f81804e8bb7758f97f8b5eb86e41 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -29,7 +29,7 @@ from rest_framework.utils.serializer_helpers import ReturnDict, BindingDict from djangoldp.fields import LDPUrlField, IdURLField from djangoldp.models import Model - +from djangoldp.permissions import DEFAULT_DJANGOLDP_PERMISSIONS # defaults for various DjangoLDP settings (see documentation) MAX_RECORDS_SERIALIZER_CACHE = getattr(settings, 'MAX_RECORDS_SERIALIZER_CACHE', 10000) @@ -80,6 +80,11 @@ class RDFSerializerMixin: '''takes a set or list of permissions and returns them in the JSON-LD format''' if self.parent and not settings.LDP_INCLUDE_INNER_PERMS: #Don't serialize permissions on nested objects return data + + if user.is_superuser: + data['permissions'] = getattr(settings, 'DJANGOLDP_PERMISSIONS', DEFAULT_DJANGOLDP_PERMISSIONS) + return data + permission_classes = getattr(model._meta, 'permission_classes', []) if not permission_classes: return data diff --git a/djangoldp/views.py b/djangoldp/views.py index dc009632bd8f95a9f6a9460ff301ed6448884f10..27f0400a4cd62f84ee0ab7614e402d151c172a50 100644 --- a/djangoldp/views.py +++ b/djangoldp/views.py @@ -420,6 +420,21 @@ class LDPViewSet(LDPViewSetGenerator): if None in self.filter_backends: self.filter_backends.remove(None) + def filter_queryset(self, queryset): + if self.request.user.is_superuser: + return queryset + return super().filter_queryset(queryset) + + def check_permissions(self, request): + if request.user.is_superuser: + return True + return super().check_permissions(request) + + def check_object_permissions(self, request, obj): + if request.user.is_superuser: + return True + return super().check_object_permissions(request, obj) + def get_depth(self) -> int: if getattr(self, 'force_depth', None): #TODO: this exception on depth for writing should be handled by the serializer itself