Создание доступа пользователей по имени к определенным страницам в навигационной панели
Мне нужно создать доступ на основе пользователей к определенным функциям моего веб-приложения Django .
Я придумал, как ограничить доступ для пользователей, которые не являются суперпользователями, следующим образом :
{% if user.is_staff %}
<a href="{% url 'creditControlHome' %}">Credit Control</a>
{% endif %}
Есть ли способ сделать это на основе имен?
Например, "если user.name = George and Bill and Clint", то они могут видеть эту часть навигационной панели?
Есть несколько способов сделать это. Можно добавить для пользователя auth Groups и затем проверить, принадлежит ли пользователь к этой группе. Например, в вашем представлении вы бы добавили пользователя в группу следующим образом:
from django.contrib.auth.models import Group
user_group = Group.objects.get_or_create(name='some_group_name')
user_group.user_set.add(user_obj)
Тогда вы можете использовать пользовательский templatetag для проверки принадлежности текущего пользователя к группе:
project_dir/app_name/templatetags/sometag.py
from django import template
register = template.Library()
@register.filter
def has_group(user, group_name):
return user.groups.filter(name=group_name).exists()
Затем в своем шаблоне вы можете использовать этот тег шаблона следующим образом:
{% load sometag %}
{% if request.user|has_group:"some_group_name" %}
<a href='#'>Your Link here</a>
{% endif %}
Если вам не нравится подход templatetag, вы можете фильтровать группу пользователей в представлении и использовать ее как флаг для отображения элементов в шаблоне.
Если это не работает, то вы можете взглянуть на Permissions.