Как ограничить набор запросов ModelAdmin элементами, редактируемыми пользователем, при использовании разрешений на объекты? - PullRequest
0 голосов
/ 23 мая 2010

Я пытаюсь реализовать систему прав доступа к объектам Флориана из его статьи о Django Advent, но я сталкиваюсь с проблемой, пытающейся ограничить возвращаемый набор запросов только теми элементами, которые пользователь имеет право редактировать Посмотреть. Флориан упоминает это в своем разделе об упаковке админа, но пропускает это. Я не вижу хорошего способа фильтрации набора запросов. Я что-то упустил?

1 Ответ

0 голосов
/ 24 мая 2010

Когда вы делаете это:

class ObjectPermission(models.Model):
    user = models.ForeignKey(User)
    can_view = models.BooleanField()
    can_change = models.BooleanField()
    can_delete = models.BooleanField()

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()

, вы можете фильтровать ваш набор запросов следующим образом (в вашем наборе запросов метода):

def queryset(self, request):
    qs = super(YourModelAdmin, self).queryset(request)
    op = ObjectPermission.objects.filter(user=request.user, can_change=True, content_type=ContentType.objects.get_for_model(YourModel)).values_list('object_id').distinct()
    qs = queryset.filter(id__in=[id[0] for id in op])
    return qs 
...