Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django许可证';它特定于templateview_Django_Django Views_Permissions - Fatal编程技术网

Django许可证';它特定于templateview

Django许可证';它特定于templateview,django,django-views,permissions,Django,Django Views,Permissions,如何创建限制用户访问模板视图(不使用任何模型)的多个权限类。 例如:我有4个用户类别-(管理员、管理人员、校长、教师)。我有一个管理仪表板模板视图,应该限制为user type=Admin 我希望能够编写多个权限类,然后可以在任何视图中组合使用 以下代码生成403错误: class AdministratorPermission(AccessMixin): def has_permission(self): return True class GeneralPerm1

如何创建限制用户访问模板视图(不使用任何模型)的多个权限类。 例如:我有4个用户类别-(管理员、管理人员、校长、教师)。我有一个管理仪表板模板视图,应该限制为user type=Admin

我希望能够编写多个权限类,然后可以在任何视图中组合使用

以下代码生成403错误:

class AdministratorPermission(AccessMixin):
    def has_permission(self):
        return True


class GeneralPerm1(AccessMixin):
    def has_permission(self):
        return True


class DashboardView(PermissionRequiredMixin,
                    LoginRequiredMixin, TemplateView):
    template_name = 'administrator/dashboard.html'
    permission_required = (AdministratorPermission,GeneralPerm1)
是否有一种方法可以执行权限之类的操作


谢谢

Permission1Mixin.py:

from django.contrib.auth.mixins import AccessMixin
from django.core.exceptions import PermissionDenied

class IsAdministratorMixin(AccessMixin):
    """ if user is not administrator, decline permission """

    def dispatch(self, request, *args, **kwargs):
        """
        if user is authenticated and administrator
            we are good. otherwise permission denied
        """
        if request.user.is_authenticated and \
                request.user.category.category == \
                UserCategoryEnum.ADMINISTRATOR.value:
            return super().dispatch(request, *args, **kwargs)

        raise PermissionDenied('Permission denied')  # decline permission
view.py

class DashboardView(IsAdministratorMixin, TemplateView):
    template_name = 'administrator/dashboard.html'

通过这种方式,我们可以创建多个独立的权限混合并将它们组合使用。

是什么让您认为这应该显示一个页面?您交给
permission\u required
的类不是权限。您似乎认为,因为
has_permission()
为这些类返回True,所以任何人都应该能够查看页面。它们不是权限混合,而是AccessMixin,正如您从它们继承的类中看到的那样。一边与模型绑定,另一边与用户或组绑定。Access mixin用于这种情况,在这种情况下,Access不会绑定到基于模型的权限。你通常会这样做。