В Django, как я могу ограничить член is_staff для доступа к URL? - PullRequest
0 голосов
/ 25 апреля 2018

В моей сети пользователь и администратор одновременно входят в систему из внешнего интерфейса.Теперь я хочу сделать так, чтобы к некоторым URL обращался только публичный пользователь.Пользователь is_staff не имеет доступа к этому URL.Как мне это сделать?

Обновлено:
Можно ли использовать для этого любой декоратор?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Если вы хотите использовать декоратор, вы можете использовать user_passes_test. Сначала определите функцию тестирования, которая проверяет, что пользователь не является сотрудником.

def is_not_staff(user):
    return not user.is_staff

Вы также можете изменить функцию проверки user.is_authenticated (user.is_authenticated() в Django <= 1.9), если вы не хотите, чтобы анонимные пользователи имели доступ к представлению. </p>

Затем используйте user_passes_test с вашей тестовой функцией, чтобы украсить вид, который вы хотите защитить.

@user_passes_test(is_not_staff)
def non_staff_view(request):
    ... 
0 голосов
/ 25 апреля 2018

Вы можете просто унаследовать LoginRequiredMixin и создать собственный миксин пользовательского доступа, как показано ниже:

class AccessMixin(LoginRequiredMixin):
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or request.user.is_staff:
            return self.handle_no_permission()
        return super().dispatch(request, *args, **kwargs)

Теперь вам просто нужно наследовать AccessMixin, как показано ниже:

class HomePageView(AccessMixin, TemplateView):
    login_url = <login-url>
    ...
    ...

Таким образом, анонимный пользователь и штатный пользователь не смогут получить доступ к содержимому страницы.


Вы также можете упомянуть то же самое в своем базовом шаблоне html

Предположим, что вы создали base.html, который расширяет блок content, и вы можете добавить разрешение, как показано ниже: Ex. base.html

{% if user.is_authenticated %}
    {% if user.is_staff %}
         <h3>Not allowed to access this page</h3>
    {% else %}
         {% block content %} {% endblock %}
    {% endif %}
{% endif %}

таким образом, когда вы расширяете base.html в своем шаблоне, весь контент, который вы пишете в {% block content %} {% endblock %}, будет отображаться только для не вошедшего в систему пользователя.

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