Создание доступа пользователей по имени к определенным страницам в навигационной панели

Мне нужно создать доступ на основе пользователей к определенным функциям моего веб-приложения 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.

Вернуться на верх