django用户权限和Permission Required Mixin

时间:2017-10-25 10:39:28

标签: python django django-1.11

在此代码中,Django将检查元组 permission_required 中的所有权限,以及拥有所有权限的用户是否可以访问该视图。如果用户在给定列表或元组中拥有任何权限,我想提供视图。例如:在这种特殊情况下,如果用户只有 polls.can_open 权限,我想提供视图

from django.contrib.auth.mixins import PermissionRequiredMixin

class MyView(PermissionRequiredMixin, View)
    permission_required = ('polls.can_open', 'polls.can_edit')

2 个答案:

答案 0 :(得分:2)

默认情况下,mixin不支持OR条件,但您可以简单地覆盖has_permission()方法来自行执行权限检查。类似的东西:

" "

答案 1 :(得分:1)

<{3}}中{p> MultiplePermissionsRequiredMixin就是您所需要的。

文档是django-braces。演示:

from django.views.generic import TemplateView

from braces import views


class SomeProtectedView(views.LoginRequiredMixin,
                        views.MultiplePermissionsRequiredMixin,
                        TemplateView):

    #required
    permissions = {
        "all": ("blog.add_post", "blog.change_post"),
        "any": ("blog.delete_post", "user.change_user")
    }
  

这个视图mixin可以通过将强制权限属性设置为dict来处理多个权限,其中任意和/或全部键都可以列入权限列表或元组。 all键要求request.user拥有所有指定的权限。 any键要求request.user至少具有一个指定的权限。