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')