Django Guardian - 如何使用基于类的视图的permission_required装饰器



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

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

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类的任何对象。例如,这对版主很有用。

守护者装饰器文档。

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

class ExampleView(TemplateView):
    template_name = 'Example.html'
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ExampleView, self).dispatch(*args, **kwargs)

最新更新