我想知道如何仅向员工用户提供文件(仅当is_staff = True时)。
答案 0 :(得分: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>
默认情况下,身份验证处理程序会将对/ example / location的访问权限限制为标记为职员的用户。您可以使用一组 PythonOption指令来修改此行为:
DjangoRequireStaffStatus :如果设置为on,则只允许“staff”用户(即设置了is_staff标志的用户)。
DjangoRequireSuperuserStatus :如果设置为on,则只允许超级用户(即设置了is_superuser标志的那些用户)。默认为关闭。
DjangoPermissionName :要求访问权限的名称。默认情况下,不需要特定权限。
答案 1 :(得分: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)
...并将其包含在您的网址配置中:
urlpatterns = patterns('',
url(r'^url1/$',
staff_only(views.my_view1),
name = 'myapp_myview1'),
url(r'^url2/$',
staff_only(views.my_view2),
name = 'myapp_myview2'),
...等