2016-09-26 59 views
0

如何检查用户是permission_required装饰器中的组的一部分?在permission_required中检查用户组成员资格

这是我现在,但它似乎并没有检查它..

@permission_required(['user.is_super_user', "'NormalUser' in user.groups.all"], raise_exception=True) 

据说这是为了检查用户是否是超级用户或用户组的一部分NormalUser但当我尝试访问站点时,当用户是NormalUser组的一部分时,它只是给我一个403错误。

有没有办法让我做到这一点?我只想使用permission_required装饰器,没有别的:S

+1

“我只想使用permission_required装饰器,没有别的:S”为什么? – e4c5

+0

顾名思义,'permission_required'检查当前用户是否有给定的_permission_(https://docs.djangoproject.com/en/1.10/topics/auth/default/#permissions-and-authorization)。 –

回答

1

您应该使用user_passes_testpermission_required修饰器检查权限。在这里使用它没有任何意义。

首先,您需要定义测试函数,返回True如果用户是超级用户,或者是NormalUser组:

def superuser_or_normaluser(user): 
    return user.is_superuser or user.groups.filter(name='NormalUser').exists() 

然后你可以使用测试功能与user_passes_test装饰。

@user_passes_test(superuser_or_normaluser, raise_exception=True) 
1

我不相信你可以通过烫发检查像后者那样在列表中,这是本质试图执行一些Python代码,这是行不通的。

理解你的用例实际上是很方便的,但是如果你严格只想使用permission_required装饰器(而不是非常简单地创建你自己的装饰器,或者使用'user_passes_test'装饰者,这似乎更合适),那么我建议你应该add a custom permission在你的系统中的某个地方,将它添加为你创建的“普通用户”组的权限,然后只需测试(使用需要的权限)该权限的存在。

根据您的使用情况确定您创建此新权限的位置。也许它是在一个UserProfile类型的对象...