保护用户的模型视图免受其他用户的攻击

时间:2018-09-10 20:11:48

标签: django django-models

我正在尝试为我的模型(与用户相关)编写一个通用的DetailView,但是我不知道如何仅对那个用户(所有者)限制对特定模型(视图)的访问。我研究了文档,但没有找到任何指导如何正确使用该方法的指南。到目前为止,我已经设法使用UserPassesTestMixin覆盖了该类的test_func()方法,在这里我检查是否object.user == self.request.user,但是我不确定这是否是正确的方法。

我刚才说的可能不清楚,例如 id 4的模型A与用户A相关(拥有)。 现在,如果用户B尝试请求模型A DetailView(/ models / 4),则应使用403错误代码,甚至更好的自定义错误页面来拒绝他。

2 个答案:

答案 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会给你一个想法。