def test_has_perm_with_obj(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=False)), MagicMock(get_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(registry.get_handlers.called) self.assertFalse(registry.get_handlers()[0].get_permissions.called) self.assertFalse(registry.get_handlers()[1].get_permissions.called) self.assertFalse(registry.get_handlers()[0].has_perm.called) self.assertFalse(registry.get_handlers()[1].has_perm.called) self.assertTrue(backend.has_perm(self.user, self.perm1, self.article)) self.assertTrue(registry.get_handlers.called) self.assertTrue(registry.get_handlers()[0].get_permissions.called) self.assertTrue(registry.get_handlers()[1].get_permissions.called) self.assertTrue(registry.get_handlers()[0].has_perm.called) self.assertTrue(registry.get_handlers()[1].has_perm.called)
def test_has_perm_with_obj(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_supported_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=False)), MagicMock(get_supported_permissions=MagicMock(return_value=perms), has_perm=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(registry.get_handlers.called) self.assertFalse(registry.get_handlers()[0].get_supported_permissions.called) self.assertFalse(registry.get_handlers()[1].get_supported_permissions.called) self.assertFalse(registry.get_handlers()[0].has_perm.called) self.assertFalse(registry.get_handlers()[1].has_perm.called) self.assertTrue(backend.has_perm(self.user, self.perm1, self.article)) self.assertTrue(registry.get_handlers.called) self.assertTrue(registry.get_handlers()[0].get_supported_permissions.called) self.assertTrue(registry.get_handlers()[1].get_supported_permissions.called) self.assertTrue(registry.get_handlers()[0].has_perm.called) self.assertTrue(registry.get_handlers()[1].has_perm.called)
def test_has_module_perms(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] app_labels = ['permission'] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_supported_app_labels=MagicMock( return_value=app_labels), has_module_perms=MagicMock(return_value=False)), MagicMock(get_supported_app_labels=MagicMock( return_value=app_labels), has_module_perms=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(registry.get_handlers.called) self.assertFalse( registry.get_handlers()[0].get_supported_app_labels.called) self.assertFalse( registry.get_handlers()[1].get_supported_app_labels.called) self.assertFalse(registry.get_handlers()[0].has_module_perms.called) self.assertFalse(registry.get_handlers()[1].has_module_perms.called) self.assertTrue(backend.has_module_perms(self.user, 'permission')) self.assertTrue(registry.get_handlers.called) self.assertTrue( registry.get_handlers()[0].get_supported_app_labels.called) self.assertTrue( registry.get_handlers()[1].get_supported_app_labels.called) self.assertTrue(registry.get_handlers()[0].has_module_perms.called) self.assertTrue(registry.get_handlers()[1].has_module_perms.called)
def test_has_module_perms(self): perms = [ 'permission.add_article', 'permission.change_article', 'permission.delete_article', ] app_labels = ['permission'] registry.get_handlers = MagicMock(return_value=[ MagicMock(get_supported_app_labels=MagicMock(return_value=app_labels), has_module_perms=MagicMock(return_value=False)), MagicMock(get_supported_app_labels=MagicMock(return_value=app_labels), has_module_perms=MagicMock(return_value=True)), ]) backend = PermissionBackend() self.assertFalse(registry.get_handlers.called) self.assertFalse(registry.get_handlers()[0].get_supported_app_labels.called) self.assertFalse(registry.get_handlers()[1].get_supported_app_labels.called) self.assertFalse(registry.get_handlers()[0].has_module_perms.called) self.assertFalse(registry.get_handlers()[1].has_module_perms.called) self.assertTrue(backend.has_module_perms(self.user, 'permission')) self.assertTrue(registry.get_handlers.called) self.assertTrue(registry.get_handlers()[0].get_supported_app_labels.called) self.assertTrue(registry.get_handlers()[1].get_supported_app_labels.called) self.assertTrue(registry.get_handlers()[0].has_module_perms.called) self.assertTrue(registry.get_handlers()[1].has_module_perms.called)
def has_perm(self, user_obj, perm, obj=None): """ Check if user have permission (of object) based on registered handlers. Parameters ---------- user_obj : django user model instance A django user model instance which be checked perm : string `app_label.codename` formatted permission string obj : None or django model instance None or django model instance for object permission Returns ------- boolean Wheter the specified user have specified permission (of specified object). """ # get permission handlers fot this perm cache_name = '_%s_cache' % perm if hasattr(self, cache_name): handlers = getattr(self, cache_name) else: handlers = [h for h in registry.get_handlers() if perm in h.get_permissions(user_obj, perm, obj=obj)] setattr(self, cache_name, handlers) for handler in handlers: if handler.has_perm(user_obj, perm, obj=obj): return True return False
def has_perm(self, user_obj, perm, obj=None): """ Check if user have permission (of object) based on registered handlers. Parameters ---------- user_obj : django user model instance A django user model instance which be checked perm : string `app_label.codename` formatted permission string obj : None or django model instance None or django model instance for object permission Returns ------- boolean Wheter the specified user have specified permission (of specified object). """ # get permission handlers fot this perm cache_name = '_%s_cache' % perm if hasattr(self, cache_name): handlers = getattr(self, cache_name) else: handlers = [ h for h in registry.get_handlers() if perm in h.get_permissions(user_obj, perm, obj=obj) ] setattr(self, cache_name, handlers) for handler in handlers: if handler.has_perm(user_obj, perm, obj=obj): return True return False
def has_perm(self, user_obj, perm, obj=None): """ Check if user have permission (of object) based on registered handlers. It will raise ``ObjectDoesNotExist`` exception when the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. Parameters ---------- user_obj : django user model instance A django user model instance which be checked perm : string `app_label.codename` formatted permission string obj : None or django model instance None or django model instance for object permission Returns ------- boolean Whether the specified user have specified permission (of specified object). Raises ------ django.core.exceptions.ObjectDoesNotExist If the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. """ if settings.PERMISSION_CHECK_PERMISSION_PRESENCE: # get permission instance from string permission (perm) # it raise ObjectDoesNotExists when the permission is not exists try: perm_to_permission(perm) except AttributeError: # Django 1.2 internally use wrong permission string thus ignore pass # get permission handlers fot this perm cache_name = '_%s_cache' % perm if hasattr(self, cache_name): handlers = getattr(self, cache_name) else: handlers = [ h for h in registry.get_handlers() if perm in h.get_supported_permissions() ] setattr(self, cache_name, handlers) for handler in handlers: if handler.has_perm(user_obj, perm, obj=obj): return True return False
def has_perm(self, user_obj, perm, obj=None): """ Check if user have permission (of object) based on registered handlers. It will raise ``ObjectDoesNotExist`` exception when the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. Parameters ---------- user_obj : django user model instance A django user model instance which be checked perm : string `app_label.codename` formatted permission string obj : None or django model instance None or django model instance for object permission Returns ------- boolean Wheter the specified user have specified permission (of specified object). Raises ------ django.core.exceptions.ObjectDoesNotExist If the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. """ if settings.PERMISSION_CHECK_PERMISSION_PRESENCE: # get permission instance from string permission (perm) # it raise ObjectDoesNotExists when the permission is not exists try: perm_to_permission(perm) except AttributeError: # Django 1.2 internally use wrong permission string thus ignore pass # get permission handlers fot this perm cache_name = '_%s_cache' % perm if hasattr(self, cache_name): handlers = getattr(self, cache_name) else: handlers = [h for h in registry.get_handlers() if perm in h.get_supported_permissions()] setattr(self, cache_name, handlers) for handler in handlers: if handler.has_perm(user_obj, perm, obj=obj): return True return False
def has_module_perms(self, user_obj, app_label): """ Check if user have permission of specified app based on registered handlers. It will raise ``ObjectDoesNotExist`` exception when the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. Parameters ---------- user_obj : django user model instance A django user model instance which be checked perm : string `app_label.codename` formatted permission string obj : None or django model instance None or django model instance for object permission Returns ------- boolean Wheter the specified user have specified permission (of specified object). Raises ------ django.core.exceptions.ObjectDoesNotExist If the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. """ # get permission handlers fot this perm cache_name = '_%s_cache' % app_label if hasattr(self, cache_name): handlers = getattr(self, cache_name) else: handlers = [ h for h in registry.get_handlers() if app_label in h.get_supported_app_labels() ] setattr(self, cache_name, handlers) for handler in handlers: if handler.has_module_perms(user_obj, app_label): return True return False
def has_module_perms(self, user_obj, app_label): """ Check if user have permission of specified app based on registered handlers. It will raise ``ObjectDoesNotExist`` exception when the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. Parameters ---------- user_obj : django user model instance A django user model instance which be checked perm : string `app_label.codename` formatted permission string obj : None or django model instance None or django model instance for object permission Returns ------- boolean Wheter the specified user have specified permission (of specified object). Raises ------ django.core.exceptions.ObjectDoesNotExist If the specified string permission does not exist and ``PERMISSION_CHECK_PERMISSION_PRESENCE`` is ``True`` in ``settings`` module. """ # get permission handlers fot this perm cache_name = '_%s_cache' % app_label if hasattr(self, cache_name): handlers = getattr(self, cache_name) else: handlers = [h for h in registry.get_handlers() if app_label in h.get_supported_app_labels()] setattr(self, cache_name, handlers) for handler in handlers: if handler.has_module_perms(user_obj, app_label): return True return False