2011-01-30 49 views
1

我想知道如何只向職員用戶提供文件(只有當is_staff = True時)。如何僅將文件提供給is_staff用戶?

+0

您是指使用Django視圖生成的靜態文件(例如Javascript,CSS或圖像)還是動態文件? – 2011-01-30 18:18:53

回答

2

如果您是指由Django生成的動態內容,請繼續閱讀。否則,對於靜態文件,請使用其他答案中描述的http服務器配置解決方案。

您可以使用裝飾設置在視圖級別細粒度的控制:

@user_passes_test(lambda u: u.is_staff) 
def my_view(request): 
    ... 

更多信息以http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.user_passes_test

如果你想廣義利用這一點,你可以這樣做:

staff_only = user_passes_test(lambda u: u.is_staff) 

...,包括這在你的URL配置:

urlpatterns = patterns('', 
    url(r'^url1/$', 
     staff_only(views.my_view1), 
     name = 'myapp_myview1'), 
    url(r'^url2/$', 
     staff_only(views.my_view2), 
     name = 'myapp_myview2'), 

...等。

+0

好的,但沒有ayush解決方案,你必須提供靜態文件與Django的對於非開發環境來說是個壞主意,我是否從圖片中錯過了一些東西? – 2011-01-30 19:40:15

7

,如果你使用的是Apache 2.2再考慮像例如

<Location /example/> 
     AuthType Basic 
     AuthName "example.com" 
     AuthUserFile /dev/null 
     AuthBasicAuthoritative Off 
     Require valid-user 

     SetEnv DJANGO_SETTINGS_MODULE mysite.settings 
     PythonAuthenHandler django.contrib.auth.handlers.modpython 
    </Location> 

默認情況下的位置,認證處理器將限制進入/例子/位置的用戶標記爲工作人員。您可以使用一組PythonOption指令修改此行爲:

DjangoRequireStaffStatus:如果設置爲只「工作人員」的用戶(即那些與is_staff標誌)將被允許。

DjangoRequireSuperuserStatus:如果設置爲僅超級用戶(即設置了is_superuser標誌的用戶)將被允許。默認爲關閉。

DjangoPermissionName:要求訪問的權限的名稱。默認情況下,不需要特定的權限。

+0

+1很酷的東西!即使這些文檔有點晦澀google-fu http://docs.djangoproject.com/en/dev/howto/apache-auth/謝謝:)) – 2011-01-30 19:38:52

相關問題