Browse Source

Addiciona checagem de permissão nos menus

pull/691/head
LeandroRoberto 8 years ago
parent
commit
3cd6f53880
  1. 73
      sapl/base/templatetags/menus.py
  2. 82
      sapl/templates/menus/mesa_diretora/mesa_diretora.html
  3. 8
      sapl/templates/menus/subnav.html
  4. 1
      sapl/templates/parlamentares/subnav.yaml

73
sapl/base/templatetags/menus.py

@ -1,6 +1,7 @@
import yaml
from django import template
from django.core.urlresolvers import reverse
import yaml
register = template.Library()
@ -14,6 +15,12 @@ def subnav(context, path=None):
1) Se a variável path não é nula;
2) Se existe no contexto a chave subnav_template_name;
3) o path default: <app_name>/subnav.yaml
Os campos esperados nos arquivos yaml são:
title
url
check_permission - opcional. quando usado
será realizado o teste de permissão para renderizá-lo.
"""
menu = None
root_pk = context.get('root_pk', None)
@ -76,40 +83,36 @@ def resolve_urls_inplace(menu, pk, rm, context):
else:
if 'url' in menu:
url_name = menu['url']
menu['url'] = reverse('%s:%s' % (rm.app_name, menu['url']),
kwargs={'pk': pk})
menu['active'] = 'active'\
if context['request'].path == menu['url'] else ''
if not menu['active']:
"""
Se não encontrada diretamente,
procura a url acionada dentro do crud, caso seja um.
Serve para manter o active no suvnav correto ao acionar
as funcionalidades diretas do MasterDetailCrud, como:
- visualização de detalhes, adição, edição, remoção.
Casos para urls_extras:
Em relações de segundo nível, como ocorre em
(0) Comissões -> (1) Composição -> (2) Participação
(2) não tem ligação direta com (1) através da view. Para (2)
ser localizado, e o nav-tabs ou nav-pills do front-end serem
ativados foi inserido o teste de existência de urls_extras
para serem testadas e, sendo válidado, o active do front-end
seja devidamente colocado.
"""
view = context['view']
if hasattr(view, '__class__') and\
hasattr(view.__class__, 'crud'):
urls = view.__class__.crud.get_urls()
for u in urls:
if (u.name == url_name or
'urls_extras' in menu and
u.name in menu['urls_extras']):
menu['active'] = 'active'
break
if 'check_permission' in menu and not context[
'request'].user.has_perm(menu['check_permission']):
menu['url'] = ''
menu['active'] = ''
else:
menu['url'] = reverse(
'%s:%s' % (rm.app_name, menu['url']), kwargs={'pk': pk})
menu['active'] = 'active'\
if context['request'].path == menu['url'] else ''
if not menu['active']:
"""
Se não encontrada diretamente,
procura a url acionada dentro do crud, caso seja um.
Serve para manter o active no suvnav correto ao acionar
as funcionalidades diretas do MasterDetailCrud, como:
- visualização de detalhes, adição, edição, remoção.
"""
view = context['view']
if hasattr(view, '__class__') and\
hasattr(view.__class__, 'crud'):
urls = view.__class__.crud.get_urls()
for u in urls:
if (u.name == url_name or
'urls_extras' in menu and
u.name in menu['urls_extras']):
menu['active'] = 'active'
break
if 'children' in menu:
menu['active'] = resolve_urls_inplace(

82
sapl/templates/menus/mesa_diretora/mesa_diretora.html

@ -1,82 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% block actions %} {% endblock %}
{% block detail_content %}
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend>Escolha da Legislatura e da Sessão Legislativa</legend>
<div class="row">
<div class="col-md-6">
<label>Escolha uma Legislatura</label>
<select name="legislatura" class="form-control" onChange="form.submit();">
{% for l in legislaturas %}
<option value="{{l.id}}" {% if l == legislatura_selecionada %} selected {% endif %}>
{{l}}
</option>
{% endfor %}
</select>
</div>
<div class="col-md-6">
<label>Escolha uma Sessão Legislativa</label>
<select name="sessao" class="form-control" onChange="form.submit();">
{% for s in sessoes %}
<option value="{{s.id}}" {% if s == sessao_selecionada %} selected {% endif %}>
{{s}}
</option>
{% endfor %}
</select>
</div>
</div>
</fieldset>
<br />
<fieldset class="form-group">
<legend>Escolha da Composição da Mesa Diretora</legend>
<div class="row">
<div class="col-md-4">
<label>Composição da Mesa Diretora</label>
<select multiple size="5" class="form-control" name="composicao_mesa">
{% for p in composicao_mesa %}
<option value="{{p.parlamentar.id}}:{{p.cargo.id}}">
{{p.parlamentar}} || {{p.cargo}}
</option>
{% endfor %}
</select>
</div>
<div class="col-md-4" align="center">
<br /><br />
{% if cargos_vagos %}
{% if perms.parlamentares.add_cargomesa or perms.parlamentares.add_composicaomesa %}
<input type="submit" name="Incluir" Value="Incluir" class="btn btn-primary" />
{% endif %}
{% endif %}
<br />
<br />
{% if perms.parlamentares.add_cargomesa or perms.parlamentares.add_composicaomesa %}
<input type="submit" name="Excluir" Value="Excluir" class="btn btn-danger" />
{% endif %}
</div>
{% if cargos_vagos %}
<div class="col-md-4">
<label>Parlamentare | Cargo</label>
<select class="form-control" name="parlamentar" id="parlamentar">
{% for p in parlamentares %}
<option value="{{p.id}}">{{p.nome_completo}}</option>
{% endfor %}
</select>
<br />
<select class="form-control" name="cargo" id="cargo">
{% for c in cargos_vagos %}
<option value="{{c.id}}">{{c}}</option>
{% endfor %}
</select>
</div>
{% endif %}
</div>
</fieldset>
</form>
{% endblock detail_content %}

8
sapl/templates/menus/subnav.html

@ -12,12 +12,16 @@
</a>
<ul class="dropdown-menu" role="menu">
{% for subitem in item.children %}
<li class="{{subitem.active}}"><a href="{{ subitem.url }}">{% trans subitem.title %}</a></li>
{% if subitem.url %}
<li class="{{subitem.active}}"><a href="{{ subitem.url }}">{% trans subitem.title %}</a></li>
{% endif %}
{% endfor %}
</ul>
</li>
{% else %}
<li class="{{item.active}}"><a href="{{ item.url }}">{% trans item.title %}</a></li>
{% if item.url %}
<li class="{{item.active}}"><a href="{{ item.url }}">{% trans item.title %}</a></li>
{% endif %}
{% endif %}
{% endfor %}
</ul>

1
sapl/templates/parlamentares/subnav.yaml

@ -7,6 +7,7 @@
url: filiacao_list
- title: {% trans 'Dependentes' %}
url: dependente_list
check_permission: parlamentares.list_dependente
- title: {% trans 'Comissões' %}
url: participacao_parlamentar_list
- title: {% trans 'Proposições' %}

Loading…
Cancel
Save