Django许可证';它特定于templateview
如何创建限制用户访问模板视图(不使用任何模型)的多个权限类。 例如:我有4个用户类别-(管理员、管理人员、校长、教师)。我有一个管理仪表板模板视图,应该限制为user type=Admin 我希望能够编写多个权限类,然后可以在任何视图中组合使用 以下代码生成403错误: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
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不会绑定到基于模型的权限。你通常会这样做。