Django is_staff权限装饰器
我试图限制访问使用2个用户级别的页面。 超级用户和pipe理员。 超级用户是分配“is_superuser”的普通Django用户。 pipe理员用户也是只有“is_staff”权限的普通用户。
问题是,当我使用这个装饰pipe理员用户,它不通过testing:
@permission_required('is_staff') def my_view(....)
@permission_required('is_staff')
为匿名用户返回false。 (正确)
@permission_required('is_superuser')
只对超级用户返回true(正确)
@permission_required('is_staff')
返回“is_staff”perm分配给用户的FALSE。 (错误)。
有什么想法吗?
is_staff
不是权限而是permission_required
你可以使用:
@user_passes_test(lambda u: u.is_staff)
要么
from django.contrib.admin.views.decorators import staff_member_required @staff_member_required
对于基于类的视图,您可以将permission_required('is_staff')
到urls.py
:
from django.contrib.auth.decorators import permission_required url(r'^your-url$', permission_required('is_staff')(YourView.as_view()), name='my-view'),
注意:在仔细validation此解决scheme无效后
在Django 1.10中,@Nikolay Georgiev的解决scheme正在工作。 在CBV中,您可以使用PermissionRequiredMixin mixin
from django.contrib.auth.mixins import PermissionRequiredMixin from django.http import HttpResponse class MyView(PermissionRequiredMixin, View): permission_required = 'is_staff' def get(self, request): return HttpResponse('result')