【问题标题】:Django Guardian - How to use a permission_required decorator with a class based view?Django Guardian - 如何在基于类的视图中使用 permission_required 装饰器?
【发布时间】:2012-06-11 02:42:36
【问题描述】:

我有一个 CB DeleteView,我正在尝试使用 Guardian 的 permission_required 进行装饰。权限应该是登录用户和 DeleteView 的对象。卫报文档对此并不太清楚,所以我想知道是否有人可以澄清一下。

【问题讨论】:

标签: django


【解决方案1】:

我遇到了几乎相同的问题,这是我的解决方案(根据您的情况改编):

views.py

class MyModelDeleteView(DeleteView):
    model=MyModel

    @method_decorator(permission_required_or_403('myapp.delete_mymodel',
        (MyModel, 'slug', 'slug'), accept_global_perms=True))
    def dispatch(self, *args, **kwargs):
        return super(MyModelDeleteView, self).dispatch(*args, **kwargs)

请注意,您可以传递 accept_global_perms 参数,默认为 False。它允许具有 'myapp.delete_mymodel' 权限的用户删除 MyModel 类的任何对象。例如,这对版主很有用。

Guardian Decorators documentation.

【讨论】:

  • 更新了守护装饰器文档链接here
【解决方案2】:

要装饰基于类的视图的每个实例,您需要装饰类定义本身。为此,您将装饰器应用于类的 dispatch() 方法。例如,

class ExampleView(TemplateView):
    template_name = 'Example.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ExampleView, self).dispatch(*args, **kwargs)

【讨论】:

  • 我知道这一点。但是,我特别询问如何在 CBV 中的 Guardian 权限装饰器中包含用户和模型对象。谢谢!
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 2017-03-08
  • 2015-06-23
  • 2015-05-29
  • 2020-07-07
  • 2016-11-09
  • 2014-10-20
相关资源
最近更新 更多