首页 > 解决方案 > django中具有权限的菜单

问题描述

我正在 Django 中创建一个具有以下结构的模块化菜单;

class Pagina(models.Model):
    nome = models.CharField(max_length=250, blank=True)
    url = models.CharField(max_length=250)

    def __str__(self):
        return self.nome

class Voce(models.Model):
    nome = models.CharField(max_length=250, blank=True)
    Pagine = models.ManyToManyField(Pagina)
    Permesso = models.ForeignKey(Permesso, on_delete=models.CASCADE)

    def __str__(self):
        return self.nome

class Menu(models.Model):
    Voci = models.ManyToManyField(Voce)

我需要检查用户是否具有查看子菜单所需的权限(组中的权限)。

菜单按以下方式呈现;

{% for voce in menu.Voci.all %}
                        <li class="m-menu__item  m-menu__item--submenu m-menu__item--rel {% ifequal parent voce.nome %}m-menu__item--active{% endifequal %}" m-menu-submenu-toggle="click" aria-haspopup="true">
                            <a href="javascript:;" class="m-menu__link m-menu__toggle">
                                <span class="m-menu__item-here"></span><span class="m-menu__link-text">{{voce}}</span><i class="m-menu__hor-arrow la la-angle-down"></i><i class="m-menu__ver-arrow la la-angle-right"></i>
                            </a>
                            <div class="m-menu__submenu m-menu__submenu--classic m-menu__submenu--left"><span class="m-menu__arrow m-menu__arrow--adjust"></span>
                                <ul class="m-menu__subnav">
                                    {% for pagina in voce.Pagine.all %}
                                    <li class="m-menu__item {% ifequal request.path pagina.url %}m-menu__item--active{% endifequal %}" aria-haspopup="true">
                                        <a href="{{pagina.url}}" class="m-menu__link ">
                                          <i class="m-menu__link-bullet m-menu__link-bullet--line"><span></span></i>
                                          <span class="m-menu__link-title"><span class="m-menu__link-wrap"><span class="m-menu__link-text">{{pagina.nome}}</span></span></span>
                                       </a>
                                    </li>
                                    {% endfor %}
                                </ul>
                            </div>
                        </li>
                        {% endfor %}

检查需要在第一个 for 循环开始后进行,以确定是否显示该特定子菜单。

用户的“gruppo”对象是与个性化 Group 对象的外键关系,该对象具有不同权限的 ManyToMany 关系,每个都有一个名称。我需要检查用户是否具有与当前循环通过的“语音”模型相同的权限。

感谢您的时间,

马泰奥

标签: djangodjango-modelsdjango-templates

解决方案


推荐阅读