一尘不染

在Django中,如何检查用户是否在某个组中?

django

我在Django的管理网站中创建了一个自定义组。

在我的代码中,我想检查用户是否在该组中。我怎么做?


阅读 855

收藏
2020-03-29

共2个答案

一尘不染

你只需通过上的groups属性即可访问组User

from django.contrib.auth.models import User, Group

group = Group(name = "Editor")
group.save()                    # save this new group for this example
user = User.objects.get(pk = 1) # assuming, there is one initial user 
user.groups.add(group)          # user is now in the "Editor" group

然后user.groups.all()返回[<Group: Editor>]

另外,更直接地,你可以通过以下方式检查用户是否在组中:

if django_user.groups.filter(name = groupname).exists():

    ...

注意,groupname它也可以是实际的Django组对象。

2020-03-29
一尘不染

你的User对象通过ManyToMany关系链接到Group对象。

因此,你可以将filter方法应用于user.groups。

因此,要检查给定的用户是否在某个组中(示例为“成员”),只需执行以下操作:

def is_member(user):
    return user.groups.filter(name='Member').exists()

如果要检查给定用户是否属于多个给定组,请使用__in运算符,如下所示:

def is_in_multiple_groups(user):
    return user.groups.filter(name__in=['group1', 'group2']).exists()

请注意,这些功能可以与@user_passes_test装饰器一起使用,以管理对视图的访问:

from django.contrib.auth.decorators import login_required, user_passes_test
@login_required
@user_passes_test(is_member) # or @user_passes_test(is_in_multiple_groups)
def myview(request):
    # Do your processing

希望有帮助

2020-03-29