我正在尝试为我的模型(与用户相关)编写一个通用的DetailView,但是我不知道如何仅对那个用户(所有者)限制对特定模型(视图)的访问。我研究了文档,但没有找到任何指导如何正确使用该方法的指南。到目前为止,我已经设法使用UserPassesTestMixin覆盖了该类的test_func()方法,在这里我检查是否object.user == self.request.user
,但是我不确定这是否是正确的方法。
我刚才说的可能不清楚,例如 id 4的模型A与用户A相关(拥有)。 现在,如果用户B尝试请求模型A DetailView(/ models / 4),则应使用403错误代码,甚至更好的自定义错误页面来拒绝他。
答案 0 :(得分:0)
您是否尝试过这样的查询?
MyTable.objects.filter(user=self.request.user)
这仅返回与当前用户相关的对象。
答案 1 :(得分:-1)
您可以尝试的几种方法
使用用户模型中提供的has_perm方法在您自己的视图中验证用户权限。
if user.has_perm('foo.add_bar'):
return HttpResponse("You are authorized to add content!")
else:
return HttpResponse("Permission to add denied")
使用自动添加到模板上下文的perms变量在模板中进行验证。
{% if perms.app_label.can_do_something %}
This content will be shown users with can_do_something permission.
{% endif %}
This content will be shown to all users.
您还可以为模型创建自己的权限
class SomeModel(models.Model):
owner = models.ForeignKey(User)
content = models.TextField()
class Meta:
permissions = (
('view_content', 'View content'),
)
看看这个link会给你一个想法。