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

问题描述 投票:3回答:1

我在Django文档中读到,当我在组中添加用户时,它将自动拥有授予该组的权限。所以,在我的应用程序中,我通过管理界面创建了一个名为“admin”的组,我给了它所需的权限。现在,如果我创建一个新用户并将其添加到组“所有者”,它就没有该组的权限。

然后我尝试在django shell中进行实验并且运行良好该组的权限真正分配给user_permissions


That's my code in django user model
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()

我不知道我做了什么是对的,如果它是正确的,为什么不能正常工作。

Update:

无需分配权限,因为用户自动拥有该组的权限

django permissions admin usergroups
1个回答
1
投票

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

发生以下情况:

  1. 您的用户对象已保存
  2. 您在其save()方法中设置权限
  3. 然后保存页面上设置的权限,覆盖你在save()中所做的任何事情

最后一个也行不通,因为分配给user.user_permissions意味着你覆盖了相关的经理属性,但除此之外它并没有真正做任何事情。

但是 - 你应该能够在管理界面中手动为用户提供一个组,这应该会使用户拥有分配给该组的所有权限。

我注意到你说你给了一个名为“admins”的组的权限,然后让用户成为“所有者”的一部分,但我希望这只是一个错字。

© www.soinside.com 2019 - 2024. All rights reserved.