Django 检查并设置用户组的权限

Posted

技术标签:

【中文标题】Django 检查并设置用户组的权限【英文标题】:Django Check and set permissions for a user group 【发布时间】:2011-08-14 13:25:23 【问题描述】:

我有一个名为 baseusers用户组,它具有一组我通过管理员添加的权限。如果 baseusers 不存在,我想创建它并设置它现在拥有的相同权限。我可以创建组,但是如何从 shell 中找出权限,然后将它们添加到我的代码中?例如,其中两个权限名为 can_fm_listcan_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] 其中permission1permission2 是权限模型的对象。【参考方案2】:

对于希望一次添加多个权限的其他人,

permissions_list = Permission.objects.all()
new_group.permissions.set(permissions_list)

【讨论】:

使用.add() 方法时会怎么做?我假设使用 .set() 替换任何以前设置的权限 @kunambi - 我知道你可能已经知道了,但对其他人来说:new_group.permissions.add(*permissions_list) @ZainPatel 如何仅添加当前模型的权限,而不是与超级用户相同的所有权限? 您可能需要将 Django 权限组设置为要使用的模型的外键

以上是关于Django 检查并设置用户组的权限的主要内容,如果未能解决你的问题,请参考以下文章

[Django]登陆界面以及用户登入登出权限

在 Django 中为特定视图设置用户权限

django中用户组的权限

Django REST框架 - 如何快速检查用户权限?

React Native:如何检查用户是否已授予gps权限

Django之管理权限