我如何检查用户是否是permission_required
装饰者内部群组的一部分?
这是我目前所拥有的,但它似乎没有检查它..
@permission_required(['user.is_super_user', "'NormalUser' in user.groups.all"], raise_exception=True)
这应该检查用户是否是超级用户或者用户是组NormalUser
的一部分但是当我尝试访问该站点时,当用户是该用户的一部分时,它只会给出403错误NormalUser
小组。
我有办法完成这项工作吗?我只想使用permission_required
装饰器,没有别的:S
答案 0 :(得分:1)
您应该使用user_passes_test
。 permission_required
装饰器检查权限。在这里使用它是没有意义的。
首先,如果用户是超级用户或者在NormalUser
组中,您需要定义一个返回True的测试函数:
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 :(得分:1)
我不相信你可以在你的列表中传递像后者那样的烫发检查,这实际上是在尝试执行一些python代码,这些代码无效。
理解你的用例实际上是什么会很方便,但是如果你只是想要使用permission_required装饰器(而不是简单地创建你自己的装饰器来完全按照你想要的那样,或者使用'user_passes_test'装饰器这似乎更合适),那么我建议你应该add a custom permission在你的系统中的某个地方,添加它作为你创建的'普通用户'组的权限,然后只测试(使用需要的权限)存在那个许可。
根据您的使用情况,将确定您在何处创建此新权限。也许它在UserProfile类型对象上......