0

外部キーによって(django auth)にarchive関連付けられているという名前のdjangoモデルがあります。groupユーザーがこのアーカイブ内の何かを編集するには、django-guardian. 以下のコードに示すように、アーカイブをグループにリンクできますが、各グループにもオブジェクト (アーカイブ) ごとのアクセス許可を設定できる必要があります。post_saveorシグナルを使用してこれを実行しようとしていpost_deleteます(孤立したアクセス許可を適切に防止するため)。

言い換えれば、ここに私が達成したいステップがあります。管理ページにアクセスします。のインスタンスを作成/編集しますArchive。そのページで、その特定のユーザーグループに関連付けるユーザーグループを指定しArchive.ます。そのインスタンスを保存すると、Django は指定されたグループを、アーカイブのそのインスタンスの「読み取り」権限で自動的に認証する必要があります。

どのファイルに保存Archive_post_save_handlerしますか? models.py? 現状では、関数を介してオブジェクトを渡すのに問題があると思われるため、グループ権限を割り当てることができません。どうすればこれを達成できますか? おまけの質問として、シェルを介してモデルを編集した場合、このフックも適用されますか?

models.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
4

1 に答える 1