Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django检查用户组权限_Django_Permissions - Fatal编程技术网

Django检查用户组权限

Django检查用户组权限,django,permissions,Django,Permissions,我有一个自定义权限,名称为“可以显示分发页面”,代码为“可以显示分发页面”,内容类型为“用户” 我添加了两个组,分别名为“manager”和“normal”,一个具有引用的权限,另一个不具有引用的权限 如何判断用户是否拥有该权限? 我尝试使用user.has\u perm()方法,但它总是返回False。正确的方法是在user类上使用。如果这不起作用,请检查以确保两个用户都设置为活动。如果这似乎不是问题所在,请调出shell中的每个用户,并调用以查看他们通过其组成员身份实际拥有的权限。Abstr

我有一个自定义权限,名称为“可以显示分发页面”,代码为“可以显示分发页面”,内容类型为“用户”

我添加了两个组,分别名为“manager”和“normal”,一个具有引用的权限,另一个不具有引用的权限

如何判断用户是否拥有该权限?


我尝试使用user.has\u perm()方法,但它总是返回False。

正确的方法是在user类上使用。如果这不起作用,请检查以确保两个用户都设置为活动。如果这似乎不是问题所在,请调出shell中的每个用户,并调用以查看他们通过其组成员身份实际拥有的权限。

AbstractUser的
方法的
具有\u perm
(如果您的用户模型继承自它)实际检查您设置的每个auth后端,内部
具有\u perm
功能,代码如下:

def _user_has_perm(user, perm, obj):
    """
    A backend can raise `PermissionDenied` to short-circuit permission checking.
    """
    for backend in auth.get_backends():
        if not hasattr(backend, 'has_perm'):
            continue
        try:
            if backend.has_perm(user, perm, obj):
                return True
        except PermissionDenied:
            return False
    return False
因此,首先要检查的是,当您有一个授权后端实际检查组权限时,您可以创建一个自定义后端,或者使用默认的
modelbend
,您可以通过以下键在设置中指定这一点:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
]
在此之后,请确保将权限作为一个字符串传递,该字符串的格式与后端使用的格式相同,在本例中,ModelBackend的格式如下
f“{perm..content\u type.app\u label}.{perm.codename}

您的案例的一个工作示例是:

user.has_perm("app_name.can_show_distribute_page")

我确实使用has_perm方法,当用户拥有权限时,该方法可以正常工作,但我想让组中的用户判断他是否通过他所在的组拥有权限,如何做到这一点?has_perm还检查用户的组,看看他们是否通过组提供了该权限。如果您愿意,这应该可以正常工作请确保安装正确。请尝试使用get_group_权限验证它们是否位于具有正确权限的正确组中。它是否确实解决了您的问题