将组的权限分配给django中的用户

Assign permissions of group to the user in django

我在 Django 文档中读到,当我在一个组中添加一个用户时,它会自动获得该组的权限 g运行。因此,在我的应用程序中,我通过管理界面创建了一个名为 "admin" 的组,并授予了我需要的权限。现在,如果我创建一个新用户并将其添加到组 "owners",它就没有该组的权限。

然后我尝试在 django shell 中进行实验并且 运行 很好 真正分配给user_permissions


组的权限 那是我在 Django 用户模型中的代码

class UserAccount(AbstractUser):

def __str__(self):  # __unicode__ for Python 2
    return str(self.username)

def __unicode__(self):
    return str(self.username)

def save(self, *args, **kwargs):
    super(UserAccount, self).save(*args, **kwargs)
    for group in set(self.groups.all()):
        self.user_permissions = group.permissions.all()

再试一次

class UserAccount(AbstractUser):

def __str__(self):  # __unicode__ for Python 2
    return str(self.username)

def __unicode__(self):
    return str(self.username)

def save(self, *args, **kwargs):
    super(UserAccount, self).save(*args, **kwargs)
    for group in set(self.groups.all()):
        for perm in group.permissions.all():
            self.user_permissions.add(perm)

当我从管理面板界面保存用户时,两者都不起作用,但在 django 上都运行良好 shell 我尝试调试 ipdb 并执行了代码但未分配权限

然后我尝试从组中反向添加权限

from django.contrib.auth.models import Group as BaseGroup
class Group(BaseGroup):
    class Meta:
        proxy = True

    def save(self):
        super(Group, self).save()
        for user in self.user_set.all():
            user.user_permissions = self.permissions.all()

我不知道我做的对不对,对不对为什么不能正常工作。

更新:

用户自动拥有群组权限,无需分配权限

这可能行不通,因为用户的权限也是从管理页面保存的。

发生以下情况:

  1. 您的用户对象已保存

  2. 你在它的save()方法中设置了权限

  3. 然后页面上设置的权限被保存,覆盖你在save()中所做的一切

最后一个也不起作用,因为分配给 user.user_permissions 意味着您覆盖了相关的管理器 属性,但除此之外它实际上没有做任何事情。

但是——您应该能够在管理界面中手动给用户一个组,这应该会导致用户拥有分配给该组的所有权限。

我注意到您说您将权限授予了名为 "admins" 的组,然后将用户设为 "owners" 的一部分,但我希望这只是一个错字。