问题 Django每个对象的权限


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

我怎么在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

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

12457
2017-09-01 23:41


起源

Site 这里不是Django contrib.site对象,而是允许用户访问的属性,对吗? - Elf Sternberg
这就是它对我的看法 - michael


答案:


这是基本的多对多内容:

 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.

如果你不想杂乱 Site,您还可以创建一个中间的“通过”表。这会创建一个间接层,但是如果需要,您可以像通过权限一样将内容添加到直通表中。你可以使用 auth 模块 groups 该表上的功能用于定义“可以访问密钥的组”和“可以修改属性的组”等。

Django中的许多字段


6
2017-09-02 00:00





这最近出现了,但我找不到有关SO的相关问题。相反,这里是我从讨论中保存的一些链接,以便稍后阅读:


2
2017-09-02 03:04





Django现在支持对象权限。除了 处理对象权限,与另一个答案相关联, REST Framework权限指南 值得一读。

您将需要添加代码 Meta 每个权限的模型的子类:

class Meta:
    permissions = (
        ('edit_this_model', 'Edit this model'),
    )

如果您使用南方,则可能需要运行 manage.py syncdb --all 更新模型后。

要测试用户是否经过身份验证,请使用如下命令:

user.has_perm('your_app_name. edit_this_model')

2
2017-07-10 16:01





很多插件 这里 这样做。


1
2017-07-26 19:58





试试Django-Guradian。您可以使用它为用户/组分配对象级别权限。


0
2018-06-26 05:55