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