Получить группу пользователей в шаблоне
Я хочу отобразить меню, которое изменяется в соответствии с группой пользователей текущего зарегистрированного пользователя, с этой логикой внутри моего представления, а затем установить переменную для проверки шаблона, чтобы определить, какие пункты меню показывать....Я задавал этот вопрос раньше, но моя логика была сделана в шаблоне. Так что теперь я хочу, чтобы это было в моем представлении...Меню выглядит следующим образом
<ul class="sidemenu">
<li><a href="/">General List </a></li>
<li><a href="/sales_list">Sales List </a></li>
<li><a href="/add_vehicle">Add a New Record </a></li>
<li><a href="/edit_vehicle">Edit Existing Record </a></li>
<li><a href="/filter">Filter Records </a></li>
<li><a href="/logout">Logout </a></li>
</ul>
Suppossing пользователь управления, они все увидят...Но предполагая, что пользователь находится в групповые продажи, они будут видеть только первые два и последние два элемента...и так далее. Я также хочу динамическое перенаправление после входа в систему на основе группы пользователя. Есть идеи?
3 ответов
стандартный способ проверки разрешений Django - это индивидуальные флаги разрешений, а не тестирование имени группы.
если вы должны проверить имена групп, зная, что пользователи в группы-это отношение "многие ко многим", вы можете получить первый группа в списке групп в шаблоне что-то вроде этого:
{{ user.groups.all.0 }}
или используя его как это в условном (непроверенном, но должно работать):
{% ifequal user.groups.all.0 'Sales' %}
...
{% endif %}
если вы идете с предпочтительная модель разрешения вы бы сделали что-то вроде следующего.
...
{% if perms.vehicle.can_add_vehicle %}
<li><a href="/add_vehicle">Add a New Record </a></li>
{% endif %}
{% if perms.vehicle.can_change_vehicle %}
<li><a href="/edit_vehicle">Edit Existing Record </a></li>
{% endif %}
...
это разрешения, автоматически созданные для вас syncdb
предполагая, что ваше приложение называется vehicle
и модель называется Vehicle
.
если пользователь является суперпользователем, они автоматически получают все разрешения.
если пользователь находится в группе продаж, у них не будет этих разрешений на транспортное средство (если вы, конечно, не добавили их в группу).
если пользователь находится в группа Управления они могут иметь эти разрешения, но вам нужно добавить их в группу на сайте администратора Django.
для вашего другого вопроса перенаправление при входе в систему на основе группы пользователей: Пользователи в группы-это отношения "многие ко многим", поэтому не очень хорошая идея использовать его как один ко многим.
создать user_tags.py в вашем приложении/templatetags следуйте выше:
# -*- coding:utf-8 -*-
from __future__ import unicode_literals
# Stdlib imports
# Core Django imports
from django import template
# Third-party app imports
# Realative imports of the 'app-name' package
register = template.Library()
@register.filter('has_group')
def has_group(user, group_name):
"""
Verifica se este usuário pertence a um grupo
"""
groups = user.groups.all().values_list('name', flat=True)
return True if group_name in groups else False
и, наконец, в шаблоне используйте его:
{% if request.user|has_group:"Administradores"%}
<div> Admins can see everything </div>
{% endif %}