2012-06-21 46 views
5

我需要为管理员创建一个“所有者”登录名。假设我们有这样的模型结构:Django管理员 - 让用户访问特定的对象/字段?

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一些用户的一部分。 ProductPhotoProduct管理页面上的TabularInline

现在,业主需要修改权限

  1. (主要目标)产品,其中product__in=user.products(所以基本上,只有产品他们所拥有)。

  2. (第二个目标)描述照片的产品

我将如何做到这一点与Django的管理/许可制度

回答

4

这是行(或对象)级别的权限。 Django提供对object permissions的基本支持,但由您来实现代码。

幸运的是,有几个应用程序提供了插入对象级权限框架。 django-guardian是我以前用过的。 djangopackages.com上的This page提供了一些您可以尝试的方法。

+2

其实 - 这是一个更好的djangopackages页面:http://www.djangopackages.com/grids/g/perms/ –

+0

是的,谢谢@andybak –

+0

啊,现场级别是我现在需要的。有没有一种方法可以在监护人之上实施?还是另一个框架提供了这个? – antihero