From 5260b39ac541d193ec022475f4d36ef1385907a2 Mon Sep 17 00:00:00 2001 From: Calum Mackervoy <c.mackervoy@gmail.com> Date: Fri, 11 Sep 2020 21:25:55 +0200 Subject: [PATCH] update: new tests for permissions --- djangoldp/permissions.py | 9 ++++++++- djangoldp/tests/models.py | 2 -- djangoldp/tests/settings_default.py | 2 +- djangoldp/tests/tests_performance.py | 8 ++++++-- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/djangoldp/permissions.py b/djangoldp/permissions.py index 4e111206..34f1fa06 100644 --- a/djangoldp/permissions.py +++ b/djangoldp/permissions.py @@ -2,6 +2,7 @@ from django.core.exceptions import PermissionDenied from django.db.models.base import ModelBase from rest_framework.permissions import DjangoObjectPermissions from django.contrib.auth.models import _user_get_all_permissions +from guardian.shortcuts import get_user_perms class LDPPermissions(DjangoObjectPermissions): @@ -47,10 +48,16 @@ class LDPPermissions(DjangoObjectPermissions): perms = set() if obj is not None and not user.is_anonymous: - # get permissions from all backends and then remove model name from the permissions + + '''guardian_perms = get_user_perms(user, obj) +>>>>>>> update: new tests for permissions model_name = model._meta.model_name forbidden_string = "_" + model_name +<<<<<<< HEAD perms = set([p.replace(forbidden_string, '') for p in _user_get_all_permissions(user, obj)]) +======= + perms = set([p.replace(forbidden_string, '') for p in guardian_perms])''' + perms = _user_get_all_permissions(user, obj) # apply anon, owner and auth permissions if user.is_anonymous: diff --git a/djangoldp/tests/models.py b/djangoldp/tests/models.py index 288a0b35..1f2526d2 100644 --- a/djangoldp/tests/models.py +++ b/djangoldp/tests/models.py @@ -172,7 +172,6 @@ class Circle(Model): anonymous_perms = ['view', 'add', 'delete', 'add', 'change', 'control'] authenticated_perms = ["inherit"] rdf_type = 'hd:circle' - depth = 1 class Batch(Model): @@ -219,7 +218,6 @@ class Project(Model): anonymous_perms = ['view', 'add', 'delete', 'add', 'change', 'control'] authenticated_perms = ["inherit"] rdf_type = 'hd:project' - depth = 1 class DateModel(Model): diff --git a/djangoldp/tests/settings_default.py b/djangoldp/tests/settings_default.py index 6ecb12a9..acfc847f 100644 --- a/djangoldp/tests/settings_default.py +++ b/djangoldp/tests/settings_default.py @@ -45,7 +45,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] AUTHENTICATION_BACKENDS=( - 'django.contrib.auth.backends.ModelBackend', 'guardian.backends.ObjectPermissionBackend') + 'django.contrib.auth.backends.ModelBackend') ROOT_URLCONF='djangoldp.urls' diff --git a/djangoldp/tests/tests_performance.py b/djangoldp/tests/tests_performance.py index f34aec23..4d817a40 100644 --- a/djangoldp/tests/tests_performance.py +++ b/djangoldp/tests/tests_performance.py @@ -1,3 +1,4 @@ +from django.contrib.auth import get_user_model from rest_framework.test import APIClient, APITestCase from djangoldp.tests.models import User, Project import cProfile, pstats, io @@ -8,6 +9,9 @@ class TestPerformance(APITestCase): def setUp(self): self.client = APIClient() + self.user = get_user_model().objects.create_user(username='john', email='jlennon@beatles.com', + password='glass onion') + self.client.force_authenticate(user=self.user) print('there are ' + str(Project.objects.count()) + ' projects in the database') print('there are ' + str(User.objects.count()) + ' users in the database') @@ -28,11 +32,11 @@ class TestPerformance(APITestCase): self.assertEqual(response.status_code, 200) print('counted ' + str(len(response.data['ldp:contains'])) + ' projects') pr.disable() - self._print_stats(pr) + #self._print_stats(pr) pr = self._enable_new_profiler() response = self.client.get('/users/', content_type='application/ld+json') self.assertEqual(response.status_code, 200) print('counted ' + str(len(response.data['ldp:contains'])) + ' users') pr.disable() - self._print_stats(pr) + #self._print_stats(pr) -- GitLab