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

6

我有一个CB DeleteView,我想使用Guardian的permission_required进行修饰。权限应该是针对已登录用户和DeleteView对象的。Guardian文档对此并不太清楚,因此我想知道是否有人能够澄清。


你的问题类似于这个问题,请查看。 https://dev59.com/OG025IYBdhLWcg3wVkef - Johnny Zhao
2个回答

5

我遇到了几乎相同的问题,以下是我的解决方案(适用于你的情况):

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文档

1
这里是更新后的 Guardian 装饰器文档链接 here - Shadi

0

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

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

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

1
我知道这一点。但是,我特别想知道如何在CBV中将用户和模型对象包含在Guardian权限装饰器中。谢谢! - Dmitriy Smirnov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接