Django 检查并设置用户组的权限
Posted
技术标签:
【中文标题】Django 检查并设置用户组的权限【英文标题】:Django Check and set permissions for a user group 【发布时间】:2011-08-14 13:25:23 【问题描述】:我有一个名为 baseusers 的 用户组,它具有一组我通过管理员添加的权限。如果 baseusers 不存在,我想创建它并设置它现在拥有的相同权限。我可以创建组,但是如何从 shell 中找出权限,然后将它们添加到我的代码中?例如,其中两个权限名为 can_fm_list 和 can_fm_add。应用程序称为 fileman。但是我需要使用 id:s 代替吗?这是我想要设置权限的代码。
userprofile/views.py
from fileman.models import Setting (Has the permissions)
from fileman.models import Newuserpath
from django.contrib.auth.models import Group
def register(request):
...
if Group.objects.count() > 0:
newuser.groups.add(1)
else:
newgroup = Group(name='baseusers')
newgroup.save()
newuser.groups.add(1)
fileman/models.py
class Setting(models.Model):
owner = AutoForeignKey(User, unique=True, related_name='fileman_Setting')
root = models.CharField(max_length=250, null=True)
home = models.CharField(max_length=250, null=True)
buffer = models.TextField(blank=True)
class Meta:
permissions = (
("can_fm_list", _("Can look files list")),
("can_fm_add", _("Can upload files")),
("can_fm_rename", _("Can rename files")),
("can_fm_del", _("Can move files to basket")),
("can_fm_destruct", _("Can delete files")),
)
def __unicode__(self):
return unicode(self.owner)
def __init__(self, *args, **kwargs):
super(Setting, self).__init__(*args, **kwargs)
if not self.root:
self.root = None
self.home = None
def writeBuffer(self, data):
self.buffer = data
self.save()
【问题讨论】:
我尝试了 mygroup = Group.objects.get(name='baseusers') 然后 mygroup.permissions.add(can_fm_list) 但我得到一个 'can_fm_list' 没有定义。我通过执行 mygroup.permissions.values_list('id',flat=True) 找到了 id:s。我可以通过 id 添加它们,但我真的不喜欢通过 id:s 添加权限,因为如果它们由于某种原因发生更改但无法找出其他方式,它们将是错误的。 【参考方案1】:看看这篇博文:Django: Using The Permission System
适应你的例子:
can_fm_list = Permission.objects.get(name='can_fm_list')
newgroup.permissions.add(can_fm_list)
【讨论】:
我尝试了 mygroup = Group.objects.get(name='baseusers') 然后 mygroup.permissions.add(can_fm_list) 但我得到一个 'can_fm_list' 没有定义。我通过执行 mygroup.permissions.values_list('id',flat=True) 找到了 id:s。我可以通过 id 添加它们,但我真的不喜欢通过 id:s 添加权限,因为如果它们由于某种原因而更改但无法找出其他方式,它们将是错误的。还是谢谢。 哦,对不起,忘了做 can_fm_list = Permission... 它有效!谢谢! 非常感谢使用 archive.org URL 来避免 URL 腐烂! 如果我想添加多个权限怎么办?我需要多次调用 add 还是有简单的方法? 要添加多个权限,请执行以下操作:newgroup.permissions = [permission1, permission2]
其中permission1
和permission2
是权限模型的对象。【参考方案2】:
对于希望一次添加多个权限的其他人,
permissions_list = Permission.objects.all()
new_group.permissions.set(permissions_list)
【讨论】:
使用.add()
方法时会怎么做?我假设使用 .set()
替换任何以前设置的权限
@kunambi - 我知道你可能已经知道了,但对其他人来说:new_group.permissions.add(*permissions_list)
@ZainPatel 如何仅添加当前模型的权限,而不是与超级用户相同的所有权限?
您可能需要将 Django 权限组设置为要使用的模型的外键以上是关于Django 检查并设置用户组的权限的主要内容,如果未能解决你的问题,请参考以下文章