diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/backend.py | 5 | ||||
-rw-r--r-- | ishtar_common/tests.py | 30 |
2 files changed, 34 insertions, 1 deletions
diff --git a/ishtar_common/backend.py b/ishtar_common/backend.py index 39df9017a..cef1f0fa2 100644 --- a/ishtar_common/backend.py +++ b/ishtar_common/backend.py @@ -36,7 +36,10 @@ class ObjectPermBackend(ModelBackend): if not user_obj.is_authenticated(): return False if not model: - # let it manage by the default backend + if user_obj.is_staff: + # let it manage by the default backend + return super(ObjectPermBackend, self).has_perm( + user_obj=user_obj, perm=perm, obj=obj) return False try: ishtar_user = models.IshtarUser.objects.get(user_ptr=user_obj) diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 2bd4afef1..4596f9b5e 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -1172,6 +1172,36 @@ class AccessControlTest(TestCase): ).count(), 1 ) + def test_django_admin(self): + username, password = "myusername", "mypassword" + __, __, user = create_user(username=username, password=password) + user.is_superuser = False + user.is_staff = False + user.save() + client = Client() + + url = "/admin/" + client.login(username=username, password=password) + response = client.get(url) + self.assertRedirects(response, "/admin/login/?next={}".format(url)) + + User.objects.filter(username='myusername').update(is_staff=True) + client.logout() + client.login(username=username, password=password) + response = client.get(url) + self.assertEqual(response.status_code, 200) + + url += "ishtar_common/persontype/" + response = client.get(url) + self.assertEqual(response.status_code, 403) + + user.user_permissions.add(Permission.objects.get( + codename='change_persontype')) + client.logout() + client.login(username=username, password=password) + response = client.get(url) + self.assertEqual(response.status_code, 200) + class UserProfileTest(TestCase): fixtures = OPERATION_FIXTURES |