【问题标题】:How to add customize userinfo table to auth_user_groups in django?如何在 django 中将自定义用户信息表添加到 auth_user_groups?
【发布时间】:2013-11-06 04:38:09
【问题描述】:

我有一个用户表“UserInfo”并创建了两个组“管理员”和“普通用户”,并为这些组授予了一些权限。

我根据用户的类型将用户添加到特定组,即如果用户是管理员,我会将管理员的权限授予该用户。

现在我想检查一个特定的用户是否 has_perm,并且我想将用户添加到表 auth_user_group 中。我该怎么做?

【问题讨论】:

    标签: django python-2.7


    【解决方案1】:

    每个用户都有一个groupsManyToManyManager,它将列出他们的组。如果要将用户添加到组,请使用ManyToManyManager api

    u = User.objects.get(pk=1)
    g = Group.objects.get(name='admin')
    u.groups.add(g)
    u.save()
    u.groups.remove(g)
    u.save()
    

    将用户添加到组后,他们将继承该组的所有权限。没有与has_perm 等效的方法来检查用户是否在组中,但是有user_passes_test 可以用来检查用户是否通过任何条件。它通过调用您使用用户对象定义的任何函数来工作:

    from django.contrib.auth.decorators import user_passes_test
    from django.shortcuts import render
    
    def is_admin(user):
       return user.group_set.filter(name='admin').count()
    
    @user_passes_test(is_admin)
    def only_admin(request):
        return render(request, 'sekret.html')
    

    【讨论】:

    • u = User.objects.get(pk=1) 在此用户表来自 auth_models 但我有自己的自定义 userinfo 表。如何将该表添加到组并检查权限?
    • 在您的自定义模型中创建一个组多对多字段并将其指向来自 django.contrib.auth 的组模型。
    • userobj = UserInfo.objects.get(email='@example.com') userobj.group_set.filter(name='Admin').count() 给我 UserInfo 对象没有属性 group_set
    • 是的,因为您没有更新您的 UserInfo 模型。
    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多