2015-10-12 2 views
1

Я использую Django для создания сайта с кучей разных страниц. У меня есть только взгляды, я не определил какие-либо модели в моем проекте. Я хочу, чтобы определенные пользователи имели ограниченный доступ (они могут видеть только некоторые из созданных мной представлений). Я установил некоторых пользователей на сайте администратора Django и добавил функциональность входа на свой сайт, используя декоратор Python @login_required.Установить права доступа для определенных видов в Django

Я немного потерял, как установить разрешения для просмотра для каждого пользователя. Я посмотрел на декоратор @permission_required, но, похоже, это относится только к моделям, а не к представлениям. Как установить разрешения просмотра страниц в Django?

ответ

2

Вы должны использовать декоратор user_passes_test для просмотра. Джанго документация имеет хороший пример это использование https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.user_passes_test

Отредактировано: на самом деле вы можете использовать permission_required декоратора для представлений также https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.permission_required

+0

Параметр 'user_passes_test' декоратора выглядит идеально. Знаете ли вы, можно ли использовать его как для групп, так и для отдельных пользователей? – kdubs

+0

@kdubs да, конечно, вы можете. Здесь есть хороший пример: https://bradmontgomery.net/blog/restricting-access-by-group-in-django/ Я использовал его в одном из своих проектов и работал как шарм. – Nick

+0

Спасибо! Это сработало. – kdubs

1

Взгляните на django-braces. Это превосходное приложение для этой цели; https://django-braces.readthedocs.org/en/latest/index.html

Он обеспечивает подмешать почти каждый случай для использования в представлениях & форм, которые позволяют выполнять проверку, чтобы ограничить доступ, как вы считаете нужным.

1

Права доступа к моделям. Если ваша логика авторизации связана с представлением, а не с моделью, подумайте о создании группы и использовании декоратора user_passes_test. Например, предположим, что у вас есть отчет, что только руководители могут видеть: создать группу под названием Надзорные и тест на членство:

def must_be_supervisor(user): 
    return user.groups.filter(name='Supervisors').count() 

@user_passes_test(must_be_supervisor) 
def quarter_report(request): 
    ... 
Смежные вопросы