2011-04-29 51 views
42

我試圖限制訪問使用2個用戶級別的頁面。超級用戶和管理員。 超級用戶是分配'is_superuser'的普通Django用戶。 管理員用戶也是隻有'is_staff'權限的普通用戶。Django is_staff許可裝飾師

的問題是,當我使用此裝飾admin用戶,它不通過測試:

@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。 (錯誤)。

有什麼想法?

+0

我應該注意到我正在使用Django 1.3與python 2。 6.1 – Dim 2011-04-29 14:12:07

回答

90

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 
+0

這樣做,儘管is_superuser存在,is_staff並不是很具誤導性。 – Dim 2011-04-29 14:21:50

+2

我添加了另一個更直觀的選項(staff_member_required)。 – arie 2011-04-29 14:24:05

+11

@permission_required('is_superuser')'爲超級用戶返回'True',因爲@ permission_required'總是爲超級用戶返回'True',無論該權限是否存在(在這種情況下它不會)。這假設您正在使用默認身份驗證後端。 – 2011-04-29 14:29:02

10

類爲本次你可以添加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'), 
+0

這不適用於我 – alejoss 2017-03-14 16:37:37

+3

這是_wrong_。 「is_staff」不是許可。 – Florian 2017-08-30 08:29:28