From 3cd6f53880758251186ead1ffb33753baf76b19c Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Mon, 3 Oct 2016 09:37:20 -0300 Subject: [PATCH] =?UTF-8?q?Addiciona=20checagem=20de=20permiss=C3=A3o=20no?= =?UTF-8?q?s=20menus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/base/templatetags/menus.py | 73 +++++++++-------- .../menus/mesa_diretora/mesa_diretora.html | 82 ------------------- sapl/templates/menus/subnav.html | 8 +- sapl/templates/parlamentares/subnav.yaml | 1 + 4 files changed, 45 insertions(+), 119 deletions(-) delete mode 100644 sapl/templates/menus/mesa_diretora/mesa_diretora.html diff --git a/sapl/base/templatetags/menus.py b/sapl/base/templatetags/menus.py index d5a398faf..56a301a6a 100644 --- a/sapl/base/templatetags/menus.py +++ b/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: /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( diff --git a/sapl/templates/menus/mesa_diretora/mesa_diretora.html b/sapl/templates/menus/mesa_diretora/mesa_diretora.html deleted file mode 100644 index 982b80407..000000000 --- a/sapl/templates/menus/mesa_diretora/mesa_diretora.html +++ /dev/null @@ -1,82 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% block actions %} {% endblock %} - -{% block detail_content %} -
- {% csrf_token %} -
- Escolha da Legislatura e da Sessão Legislativa -
-
- - -
-
- - -
-
-
-
-
- Escolha da Composição da Mesa Diretora -
-
- - -
- -
-

- {% if cargos_vagos %} - {% if perms.parlamentares.add_cargomesa or perms.parlamentares.add_composicaomesa %} - - {% endif %} - {% endif %} -
-
- {% if perms.parlamentares.add_cargomesa or perms.parlamentares.add_composicaomesa %} - - {% endif %} -
- - {% if cargos_vagos %} -
- - -
- -
- {% endif %} - -
-
-
-{% endblock detail_content %} diff --git a/sapl/templates/menus/subnav.html b/sapl/templates/menus/subnav.html index 7a029ab10..580d4160c 100644 --- a/sapl/templates/menus/subnav.html +++ b/sapl/templates/menus/subnav.html @@ -12,12 +12,16 @@ {% else %} -
  • {% trans item.title %}
  • + {% if item.url %} +
  • {% trans item.title %}
  • + {% endif %} {% endif %} {% endfor %} diff --git a/sapl/templates/parlamentares/subnav.yaml b/sapl/templates/parlamentares/subnav.yaml index 8d9c4e65b..6979811f9 100644 --- a/sapl/templates/parlamentares/subnav.yaml +++ b/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' %}