Как обслуживать файлы только пользователю is_staff? - PullRequest
1 голос
/ 30 января 2011

Я хотел бы знать, как обслуживать файлы только для штатных пользователей (только когда is_staff = True).

Ответы [ 2 ]

7 голосов
/ 30 января 2011

если вы используете 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 : если установлено только для "штатных" пользователей (то есть тех, у кого установлен флаг is_staff).

DjangoRequireSuperuserStatus : если разрешено использование только суперпользователей (то есть тех, у которых установлен флаг is_superuser) По умолчанию выключено.

DjangoPermissionName : имя разрешения, которое требуется для доступа. По умолчанию никаких специальных разрешений не требуется.

2 голосов
/ 30 января 2011

Если вы имеете в виду динамический контент, сгенерированный 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'),

... и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...