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

时间:2017-01-12 11:43:08

标签: django permissions admin usergroups

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

然后我尝试在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 个答案:

答案 0 :(得分:1)

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

发生以下情况:

  1. 您的用户对象已保存

  2. 您在save()方法中设置权限

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

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

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

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