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