2012-06-21 3 views
5

Мне нужно сделать логин «владельцем» для администратора. Скажем, у нас есть эта модель структуры:Django admin - предоставление пользователям доступа к определенным объектам/полям?

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) 

У нас есть группа под названием Owners, что некоторые пользователи являются частью. ProductPhoto является TabularInline на странице администрирования Product.

Теперь владельцы должны получить разрешение редактировать

  1. (основная цель)только продукты, где product__in=user.products (так в основном, только продукты принадлежат их).

  2. (вторичная цель)только в описание и фотографии продукции

Как бы я сделать это с помощью системного администратора/разрешения Джанго?

ответ

4

Это разрешение уровня строки (или объекта). Django предоставляет базовую поддержку для object permissions, но вам решать, как реализовать этот код.

К счастью, есть несколько приложений, которые предоставляют рамки разрешения доступа на уровне объекта. django-guardian - это тот, который я использовал раньше. This page на djangopackages.com предоставляет еще несколько возможностей, которые вы можете попробовать.

+2

На самом деле - это страница лучшего djangopackages: http://www.djangopackages.com/grids/g/perms/ –

+0

Да, спасибо @andybak –

+0

А, полевой уровень - это то, что мне нужно сейчас. Есть ли способ реализовать это на вершине опекуна? Или это создает другие рамки? – antihero

Смежные вопросы