Dim*_*Dim 51 django permissions admin decorator
我试图限制使用2个用户级别的页面访问.超级用户和管理员.超级用户是指定了"is_superuser"的常规Django用户.管理员用户也是普通用户,仅分配了"is_staff"权限.
问题是当我为管理员用户使用这个装饰器时,它没有通过测试:
@permission_required('is_staff')
def my_view(....)
Run Code Online (Sandbox Code Playgroud)
@permission_required('is_staff')
对匿名用户返回false.(正确)
@permission_required('is_superuser')
仅对超级用户返回true(正确)
@permission_required('is_staff')
对于分配了'is_staff'perm的用户返回FALSE.(错误).
有什么想法吗?
ari*_*rie 106
is_staff
不是权限,所以permission_required
你可以使用:
@user_passes_test(lambda u: u.is_staff)
Run Code Online (Sandbox Code Playgroud)
要么
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
Run Code Online (Sandbox Code Playgroud)
对于基于类的视图,您可以添加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'),
Run Code Online (Sandbox Code Playgroud)
对于基于类的视图,UserPassesTestMixin很方便,例如
class ImportFilePostView(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
return self.request.user.is_staff
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25120 次 |
最近记录: |