【发布时间】:2019-07-24 08:48:23
【问题描述】:
Views.py
class templateList(PermissionRequiredMixin, TemplateView):
permission_required = 'accounts.template_all'
def get(self, request, *args, **kwargs):
#view logic
print(self.request.user.has_perms('accounts.template_all'))
return render(request, template_name, context)
accounts/models.py
class User(AbstractBaseUser, PermissionsMixin):
# some fields here
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
permissions = (
("template_all", "access to all templates"),
)
视图名称.___mro____
(<class 'template.views.templateList'>, <class 'django.contrib.auth.mixins.PermissionRequiredMixin'>, <class 'django.contrib.auth.mixins.AccessMixin'>, <class 'django.views.generic.base.TemplateView'>, <class 'django.views.generic.base.TemplateResponseMixin'>, <class 'django.views.generic.base.ContextMixin'>, <class 'django.views.generic.base.View'>, <class 'object'>)
views.py 中的self.request.user.has_perms('accounts.template_all') 返回正确的布尔值,但是,self.has_permission() 每次都返回 True。 permission_required 没有效果,即使打印返回 false 用户仍然可以看到页面。 self.get_permission_required alos 返回正确的值。帮助表示赞赏。
【问题讨论】:
-
我认为您应该以不同的方式订购基类:
class viewName(PermissionRequiredMixin, AccessMixin, generic.TemplateView)。现在TemplateView会覆盖您的PermissionRequiredMixin。 -
你的
print(..)测试没有将元组传递给has_perms,如果你这样称呼它会发生什么:print(self.request.user.has_perms('accounts.action_all',))?
标签: python django permissions mixins user-permissions