2012-06-21 9 views
5

Necesito hacer un inicio de sesión de "propietarios" para el administrador. Digamos que tenemos este modelo de estructura:administrador de Django: ¿da acceso a los usuarios a objetos/campos específicos?

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) 

Tenemos un grupo llamado Owners que algunos usuarios forman parte. El ProductPhoto es un TabularInline en la página de administración Product.

Ahora, los propietarios necesitan permiso para editar

  1. (objetivo primario)sólo productos en los que product__in=user.products (lo que, básicamente, sólo los productos de su propiedad).

  2. (objetivo secundario) sólo los Descripción y fotos de productos

¿Cómo voy a hacer esto con el sistema de administración/permiso de Django?

Respuesta

4

Este es el permiso de nivel de fila (u objeto). Django proporciona soporte básico para object permissions pero depende de usted implementar el código.

Afortunadamente, hay algunas aplicaciones que brindan un marco de permisos de nivel de objeto desplegable. django-guardian es uno que he usado antes. This page en djangopackages.com proporciona más que puedes probar.

+2

En realidad, esta es una mejor página djangopackages: http://www.djangopackages.com/grids/g/perms/ –

+0

Sí, gracias @andybak –

+0

Ah, el nivel de campo es lo que necesito también ahora. ¿Hay alguna manera de implementar esto además de tutor? ¿O proporciona otro marco esto? – antihero

Cuestiones relacionadas