def setUp(self): super().setUp() users = User.objects.all() usernames = users.values_list("username", flat=True).order_by("username") assert tuple(usernames) == ("normal_test_user", "staff_test_user", "superuser") self.superuser = self._get_user(usertype="superuser") # The "staff user" has some permissions: self.staff_user = self._get_user(usertype="staff") self.staff_group = Group.objects.create(name="Staff User Group") self.staff_group.permissions.add(self.extra_permission) self.staff_group.permissions.add( get_permission_by_string( "django_tools_test_app.add_permissiontestmodel")) self.staff_group.permissions.add( get_permission_by_string( "django_tools_test_app.change_permissiontestmodel")) self.staff_group.permissions.add( get_permission_by_string( "django_tools_test_app.delete_permissiontestmodel")) self.staff_user.groups.add(self.staff_group) self.staff_user.save() # The "normal user" has no permissions: self.normal_user = self._get_user(usertype="normal") self.normal_group = Group.objects.create(name="Normal User Group") self.normal_user.groups.add(self.normal_group) self.normal_user.save()
def test_get_permission_wrong_codename(self): with self.assertRaises(PermissionDenied) as cm: get_permission_by_string("auth.wrong") self.assert_exception_startswith( cm, "Codename 'wrong' from permission 'auth.wrong' doesn't exists!")
def test_get_permission_wrong_app_label(self): with self.assertRaises(PermissionDenied) as cm: get_permission_by_string("wrong.foobar") self.assert_exception_startswith( cm, "App label 'wrong' from permission 'wrong.foobar' doesn't exists!")
def has_object_permission(user, opts, action, raise_exception=True): """ Check if user has "<app_name>.<action>_<model_name>" opts is <model_instance>._meta """ codename = get_permission_codename(action, opts) if codename == "can_publish_page": # FIXME: Django CMS code name doesn't has the prefix "can_" ! # TODO: Remove "can_" from own permissions to unify it. # see also: publisher.models.PublisherStateModel#object_permission_name # https://github.com/wearehoods/django-ya-model-publisher/issues/8 codename = "publish_page" perm_name = "%s.%s" % ( opts.app_label, codename ) try: has_permission = check_permission(user, perm_name, raise_exception) except PermissionDenied: # get_permission() will raise helpfull errors if format is wrong # or if the permission doesn't exists get_permission_by_string(perm_name) raise if not has_permission: get_permission_by_string(perm_name) return has_permission
def test_get_default_permissions(self): # https://docs.djangoproject.com/en/1.8/ref/models/options/#default-permissions permission = get_permission_by_string("django_tools_test_app.add_permissiontestmodel") self.assert_permissiontestmodel(permission) self.assertEqual(permission.codename, "add_permissiontestmodel") permission = get_permission_by_string("django_tools_test_app.change_permissiontestmodel") self.assert_permissiontestmodel(permission) self.assertEqual(permission.codename, "change_permissiontestmodel") permission = get_permission_by_string("django_tools_test_app.delete_permissiontestmodel") self.assert_permissiontestmodel(permission) self.assertEqual(permission.codename, "delete_permissiontestmodel")
def setUpTestData(cls): super().setUpTestData() cls.extra_permission = get_permission_by_string( permission="django_tools_test_app.extra_permission") cls.instance = PermissionTestModel.objects.create(foo="bar")
def test_get_permission_wrong_format(self): with self.assertRaises(PermissionDenied) as cm: get_permission_by_string("no_dot_in_string") self.assert_exception_startswith(cm, "Wrong permission string format")
def test_get_extra_permission(self): # https://docs.djangoproject.com/en/1.8/ref/models/options/#permissions permission = get_permission_by_string( "django_tools_test_app.extra_permission") self.assert_extra_permission(permission)