我在Django文档中读到,当我在组中添加用户时,它将自动拥有授予该组的权限。因此,在我的应用程序中,我创建了一个名为" admin"通过管理界面,我给了我需要的权限。现在,如果我创建一个新用户并将其添加到组"所有者",则它不具有该组的权限。
然后我尝试在django shell中进行实验,它运行良好
该组的权限实际分配给user_permissions
中的代码
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()
我不知道我做了什么是对的,如果不对,为什么不能正常工作。
无需分配权限,因为用户自动拥有该组的权限
答案 0 :(得分:1)
这可能不起作用,因为用户的权限也是从管理页面保存的。
发生以下情况:
您的用户对象已保存
您在save()方法中设置权限
然后保存页面上设置的权限,覆盖你在save()中所做的一切
最后一个也行不通,因为分配给user.user_permissions
意味着你覆盖了相关的经理属性,但除此之外它并没有真正做任何事情。
但是 - 您应该能够在管理界面中手动为用户提供一个组,这应该会让用户将所有权限分配给该组。
我注意到你说你将权限授予了一个名为“admins”的组,然后让用户成为“所有者”的一部分,但我希望这只是一个错字。