将组的权限分配给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()
我不知道我做的对不对,对不对为什么不能正常工作。
更新:
用户自动拥有群组权限,无需分配权限
这可能行不通,因为用户的权限也是从管理页面保存的。
发生以下情况:
您的用户对象已保存
你在它的save()方法中设置了权限
然后页面上设置的权限被保存,覆盖你在save()中所做的一切
最后一个也不起作用,因为分配给 user.user_permissions
意味着您覆盖了相关的管理器 属性,但除此之外它实际上没有做任何事情。
但是——您应该能够在管理界面中手动给用户一个组,这应该会导致用户拥有分配给该组的所有权限。
我注意到您说您将权限授予了名为 "admins" 的组,然后将用户设为 "owners" 的一部分,但我希望这只是一个错字。
我在 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()
我不知道我做的对不对,对不对为什么不能正常工作。
更新:
用户自动拥有群组权限,无需分配权限
这可能行不通,因为用户的权限也是从管理页面保存的。
发生以下情况:
您的用户对象已保存
你在它的save()方法中设置了权限
然后页面上设置的权限被保存,覆盖你在save()中所做的一切
最后一个也不起作用,因为分配给 user.user_permissions
意味着您覆盖了相关的管理器 属性,但除此之外它实际上没有做任何事情。
但是——您应该能够在管理界面中手动给用户一个组,这应该会导致用户拥有分配给该组的所有权限。
我注意到您说您将权限授予了名为 "admins" 的组,然后将用户设为 "owners" 的一部分,但我希望这只是一个错字。