如何仅向is_staff用户提供文件?

时间:2011-01-30 17:41:25

标签: django

我想知道如何仅向员工用户提供文件(仅当is_staff = True时)。

2 个答案:

答案 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'),

...等