2012-06-21 13 views
5

Potrzebuję wykonać login "właściciela" dla administratora. Że mamy tego modelu strukturę:Administrator Django - dając użytkownikom dostęp do konkretnych obiektów/pól?

class Product(models.Model): 
    owner = models.ManyToManyField(User) 
    name = models.CharField(max_length=255) 
    description = models.CharField(max_length=255) 
    photos = models.ManyToManyField(Photo, through='ProductPhoto') 


class Photo(models.Model): 
    order = models.IntegerField() 
    image = models.ImageField(upload_to='photos') 
    alt = models.CharField(max_length=255) 


class ProductPhoto(models.Model): 
    photo = models.ForeignKey(Photo) 
    product = models.ForeignKey(Product) 

mamy grupę o nazwie Owners że niektórzy użytkownicy są częścią. ProductPhoto to TabularInline na stronie administratora .

Teraz właściciele potrzebują pozwolenia na edycję

  1. (cel podstawowy)tylko produkty gdzie product__in=user.products (więc w zasadzie tylko produkty posiadaniu przez nich).

  2. (cel drugorzędny)tylko się opis i zdjęcia produktów

Jak zrobić to z systemu admin/zezwolenia Django?

Odpowiedz

4

To uprawnienie na poziomie wiersza (lub obiektu). Django zapewnia podstawowe wsparcie dla object permissions, ale od Ciebie zależy wdrożenie kodu.

Na szczęście istnieje kilka aplikacji, które udostępniają uproszczony framework uprawnień na poziomie obiektu. django-guardian to taki, którego użyłem wcześniej. This page na stronie djangopackages.com oferuje więcej możliwości wypróbowania.

+2

Właściwie - to lepsza strona djangopackages: http://www.djangopackages.com/grids/g/perms/ –

+0

Tak, dzięki @andybak –

+0

Ach, poziom pole jest co muszę również teraz. Czy istnieje sposób wdrożenia tego na opiekuna? Czy może to zapewnić inny framework? – antihero

Powiązane problemy