Django权限:自定义基于逻辑的检查



简化示例:

# foo/models.py
class Bar(models.Model):
author = models.ForeignKey(User)
# foo/views.py
class BarEditView(PermissionRequiredMixin, UpdateView):
permission_required = 'foo.change_bar'
model = Bar
success_url = '/'

我希望BarEditView可以通过以下方式访问:

  1. 在数据库中具有foo.change_bar权限的用户(该类的第一行已经完成)
  2. 该Bar记录的作者

前者很容易由基本权限/组处理。我如何实现第二个目标?我需要编写一些自定义权限检查逻辑,但我在文档或谷歌中找不到任何内容。我不想要"手动"。每次设置/更改/删除一个Bar作者时,为数据库添加一个权限。

要明确的是,我不是在问如何创建自定义权限。我想尝试增加逻辑来确定谁有权限。

是的,django.contrib.auth.mixins.UserPassesTestMixin是我需要的!

# foo/models.py
class Bar(models.Model):
author = models.ForeignKey(User)
# foo/views.py
class BarEditView(UserPassesTestMixin, UpdateView):
model = Bar
success_url = '/'

def test_func(self):
if self.request.user.has_perm('foo.change_bar'):
return True
elif self.request.user == self.get_object().author:
return True
else:
return False

相关内容

  • 没有找到相关文章

最新更新