Django每个对象的权限

Gor*_*oro 11 django django-models rbac

我有用户,每个用户都与他们可以访问的房地产属性列表相关联.多个用户可能有权查看同一站点.

我怎么在django中设置它?

我有:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    last_session_time_online = models.IntegerField()
    total_time_online = models.IntegerField()
    def __unicode__(self):
        return self.user
Run Code Online (Sandbox Code Playgroud)

class Site(models.Model):
    site_name = models.CharField(max_length = 512)
    ...Other stuff...
    def __unicode__(self):
        return self.user
Run Code Online (Sandbox Code Playgroud)

Elf*_*erg 6

这是基本的多对多内容:

 class Site(models.Model):
     site_name = models.CharField(max_length = 512)
     allowed_users = models.ManyToManyField(User)

 ...

 sam = User.objects.get(username = 'sam')
 frodo = User.objects.get(username = 'frodo')

 hobbithole = Site.objects.get(site_name = 'The Hobbit Hole')
 hobbithole.allowed_users.add(sam, frodo)

 frodo.site_set.all() # Should return "The Hobbit Hole" object, and any other place frodo's allowed to visit.

 somesite.allowed_users.exists(user = frodo) # returns True if frodo is in the site's set of allowed users.
Run Code Online (Sandbox Code Playgroud)

如果你不想杂乱Site,你也可以创建一个中间的"通过"表.这会创建一个间接层,但允许您根据需要将权限添加到直通表中(如果需要).您可以使用该表上的auth模块groups功能来定义"可以访问密钥的组"和"可以修改属性的组"等.

Django中的许多字段