我有一个名为的 django 模型archive
,它通过外键与group
(django auth) 绑定。为了让用户编辑此存档中的某些内容,他们必须有权通过django-guardian
. 我可以将存档与组链接,如下面的代码所示,但是,我还需要能够为每个组设置每个对象(存档)的权限。我正在寻求使用post_save
orpost_delete
信号来执行此操作(以正确防止孤儿权限)。
换句话说,这是我想要完成的步骤。访问管理页面。创建/编辑Archive
. 在该页面上指定将与该特定用户组关联的用户组Archive.
保存该实例后,Django 应自动对具有该存档实例的“读取”权限的指定组进行身份验证。
我将存储Archive_post_save_handler
在什么文件中?模型.py?就目前而言,我无法分配组权限,因为我认为我无法通过我的函数传递对象。我怎样才能做到这一点?作为一个额外的问题,如果我通过 shell 编辑模型,这个钩子是否也适用?
模型.py
from django.db import models
from django.contrib.auth.models import Group
from django.db.models.signals import *
from django.dispatch import receiver
class Archive(models.Model):
name = models.CharField(max_length = 30)
nickname = models.CharField(max_length = 30, blank=True)
Group = models.ForeignKey(Group, blank=True, null=True, help_text='A group of users that are allowed access to the archive. This should typically be called the same thing as the archive name.')
class Meta:
permissions = (
('read', 'Read Archive'),
)
def __unicode__(self):
return self.name
@receiver(post_save, sender=Archive)
def Archive_post_save_handler(sender, instance, **kwarks):
group = Group.objects.get(name=instance.Group)
assign_perm('read', group, instance) #what I primarily want to accomplish in this question is on this line