我在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()
我不知道我做了什么是对的,如果它是正确的,为什么不能正常工作。
无需分配权限,因为用户自动拥有该组的权限
这可能不起作用,因为用户的权限也从管理页面保存。
发生以下情况:
最后一个也行不通,因为分配给user.user_permissions
意味着你覆盖了相关的经理属性,但除此之外它并没有真正做任何事情。
但是 - 你应该能够在管理界面中手动为用户提供一个组,这应该会使用户拥有分配给该组的所有权限。
我注意到你说你给了一个名为“admins”的组的权限,然后让用户成为“所有者”的一部分,但我希望这只是一个错字。