diff --git a/sapl/painel/views.py b/sapl/painel/views.py index cea4e2870..d488294b2 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -3,8 +3,9 @@ import json import logging from django.contrib import messages -from django.contrib.auth.decorators import user_passes_test -from django.core.exceptions import ObjectDoesNotExist +from django.contrib.auth.decorators import (login_required, permission_required, + user_passes_test) +from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.urls import reverse from django.db.models import Q from django.http import HttpResponse, JsonResponse @@ -199,39 +200,23 @@ def can_vote(context, context_vars, request): return context, context_vars +@login_required +@permission_required('parlamentares.can_vote', raise_exception=True) def votante_view(request): logger = logging.getLogger(__name__) - username = request.user.username if request.user.is_authenticated else 'AnonymousUser' - - # Pega o votante relacionado ao usuário - template_name = 'painel/voto_individual.html' - context = {} - context_vars = {} + username = request.user.username - try: - logger.debug(f'user={username}. Tentando obter objeto Votante com user={request.user}.') - if not request.user.is_anonymous and request.user.is_authenticated: - votante = Votante.objects.get(user=request.user) - else: - raise ObjectDoesNotExist - except ObjectDoesNotExist: - logger.error(f"user={username}. Usuário (user={request.user}) não cadastrado como votante na tela de parlamentares. " - "Contate a administração de sua Casa Legislativa!") - msg = _("Usuário não cadastrado como votante na tela de parlamentares. Contate a administração de sua Casa Legislativa!") - context.update({'error_message': msg}) - - return render(request, template_name, context) - context_vars = {'votante': votante} + if not Votante.objects.filter(user=request.user).exists(): + logger.warning( + f'user={username} sem cadastro de Votante tentou acessar /voto-individual/.' + ) + raise PermissionDenied + + template_name = 'painel/voto_individual.html' context = {'head_title': str(_('Votação Individual'))} + context_vars = {'votante': Votante.objects.get(user=request.user)} - # Verifica se usuário possui permissão para votar - if 'parlamentares.can_vote' in request.user.get_all_permissions(): - context, context_vars = can_vote(context, context_vars, request) - logger.debug("user=" + username + ". Verificando se usuário {} possui permissão para votar.".format(request.user)) - else: - logger.error("user=" + username + ". Usuário {} sem permissão para votar.".format(request.user)) - context.update({'permissao': False, - 'error_message': 'Usuário sem permissão para votar.'}) + context, context_vars = can_vote(context, context_vars, request) # Salva o voto if request.method == 'POST': diff --git a/sapl/templates/painel/voto_individual.html b/sapl/templates/painel/voto_individual.html index c35daa5fa..1dde0990d 100644 --- a/sapl/templates/painel/voto_individual.html +++ b/sapl/templates/painel/voto_individual.html @@ -127,10 +127,11 @@ +{% if not error_message %} {% render_chunk_vendors 'js' %} -{% render_bundle 'global' 'js' %} -{% render_bundle 'painel' 'js' %} - +{% render_bundle 'global' 'js' %} +{% render_bundle 'painel' 'js' %} + +{% endif %}