diff --git a/.travis.yml b/.travis.yml index fc26eab04e..20ff723f0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ python: - 2.7 env: global: - - TEST_APPS="authentication document_indexing documents django_gpg dynamic_search lock_manager document_signatures folders ocr sources tags" + - TEST_APPS="authentication django_gpg document_indexing document_signatures documents dynamic_search folders lock_manager ocr permissions sources tags" matrix: - DB=mysql - DB=postgres diff --git a/mayan/apps/permissions/classes.py b/mayan/apps/permissions/classes.py index 7efd242920..3fcd26286b 100644 --- a/mayan/apps/permissions/classes.py +++ b/mayan/apps/permissions/classes.py @@ -44,10 +44,14 @@ class Permission(object): _stored_permissions_cache = {} _permissions = {} + @classmethod + def invalidate_cache(cls): + cls._stored_permissions_cache = {} + @classmethod def check_permissions(cls, requester, permissions): for permission in permissions: - if permission.requester_has_this(requester): + if permission.stored_permission.requester_has_this(requester): return True logger.debug('no permission') @@ -100,6 +104,3 @@ class Permission(object): stored_permission.volatile_permission = self self.__class__._stored_permissions_cache[self.uuid] = stored_permission return stored_permission - - def requester_has_this(self, requester): - return self.stored_permission.requester_has_this(requester) diff --git a/mayan/apps/permissions/test_models.py b/mayan/apps/permissions/test_models.py new file mode 100644 index 0000000000..7df2a6537f --- /dev/null +++ b/mayan/apps/permissions/test_models.py @@ -0,0 +1,36 @@ +from __future__ import unicode_literals + +from django.conf import settings +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group +from django.core.exceptions import PermissionDenied +from django.core.files import File +from django.core.urlresolvers import reverse +from django.test.client import Client +from django.test import TestCase + +from .classes import Permission +from .models import Role, StoredPermission +from .permissions import permission_role_view + + +class PermissionTestCase(TestCase): + def setUp(self): + self.user = get_user_model().objects.create(username='test user') + self.group = Group.objects.create(name='test group') + self.role = Role.objects.create(label='test role') + Permission.invalidate_cache() + + def test_no_permissions(self): + with self.assertRaises(PermissionDenied): + Permission.check_permissions(requester=self.user, permissions=(permission_role_view,)) + + def test_with_permissions(self): + self.group.user_set.add(self.user) + self.role.permissions.add(permission_role_view.stored_permission) + self.role.groups.add(self.group) + + try: + Permission.check_permissions(requester=self.user, permissions=(permission_role_view,)) + except PermissionDenied: + self.fail('PermissionDenied exception was not expected.')