コード例 #1
0
    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()
コード例 #2
0
    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!")
コード例 #3
0
    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!")
コード例 #4
0
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
コード例 #5
0
    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")
コード例 #6
0
    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")
コード例 #7
0
    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")
コード例 #8
0
 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)