检查permission_required中的用户组成员身份

时间:2016-09-26 14:37:24

标签: python django python-2.7 django-admin django-views

我如何检查用户是否是permission_required装饰者内部群组的一部分?

这是我目前所拥有的,但它似乎没有检查它..

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

这应该检查用户是否是超级用户或者用户是组NormalUser的一部分但是当我尝试访问该站点时,当用户是该用户的一部分时,它只会给出403错误NormalUser小组。

我有办法完成这项工作吗?我只想使用permission_required装饰器,没有别的:S

2 个答案:

答案 0 :(得分:1)

您应该使用user_passes_testpermission_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类型对象上......

相关问题