From 37b1db6d7a08c49012d2bd34c992c16803e81649 Mon Sep 17 00:00:00 2001 From: rangelbruno Date: Sat, 18 Oct 2025 16:04:58 -0300 Subject: [PATCH] =?UTF-8?q?Cria=C3=A7=C3=A3o=20da=20tela=20de=20erro=20mai?= =?UTF-8?q?s=20amig=C3=A1vel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/templates/403.html | 245 ++++++++++++++++++++++++++ sapl/templates/base.html | 1 - sapl/templates/fluxo_proposicoes.html | 135 +++++++++++--- sapl/urls.py | 7 +- 4 files changed, 364 insertions(+), 24 deletions(-) create mode 100644 sapl/templates/403.html diff --git a/sapl/templates/403.html b/sapl/templates/403.html new file mode 100644 index 000000000..04d6a71a0 --- /dev/null +++ b/sapl/templates/403.html @@ -0,0 +1,245 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block head_title %}Acesso Negado - {{nome_casa}}{% endblock %} + +{% block base_content %} + + +
+
+ +
+ +

403

+

+ Acesso Negado +

+ +

+ Desculpe, você não tem permissão para acessar esta página ou recurso. +

+ +
+

Por que estou vendo esta mensagem?

+

Esta página requer permissões específicas que seu usuário não possui. Isso pode acontecer por diversos motivos:

+
    +
  • Você não está logado - Faça login com suas credenciais
  • +
  • Seu perfil não tem permissão - Entre em contato com o administrador do sistema
  • +
  • A funcionalidade é restrita - Apenas alguns tipos de usuário podem acessar
  • +
  • Sessão expirou - Tente fazer login novamente
  • +
+
+ + {% if user.is_authenticated %} +
+ + Usuário: {{ user.username }} + {% if user.groups.all %} + | Grupos: + {% for group in user.groups.all %} + {{ group.name }}{% if not forloop.last %}, {% endif %} + {% endfor %} + {% endif %} +
+ {% else %} +
+ + Dica: Você não está logado. Faça login para acessar recursos restritos. +
+ {% endif %} + +
+ + Voltar + + + Página Inicial + + {% if not user.is_authenticated %} + + Fazer Login + + {% endif %} +
+ +

+ Se você acredita que deveria ter acesso a esta página, entre em contato com o administrador do sistema. +

+
+ +{% endblock base_content %} diff --git a/sapl/templates/base.html b/sapl/templates/base.html index 5d51bbd03..5a375ecc6 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -116,7 +116,6 @@ Logo {% if nome %}{{ nome }}{% else %}{% trans 'Câmara/Assembléia não configurada'%}{% endif %} -
{{nome_sistema}}
diff --git a/sapl/templates/fluxo_proposicoes.html b/sapl/templates/fluxo_proposicoes.html index edb5c7465..76abcb190 100644 --- a/sapl/templates/fluxo_proposicoes.html +++ b/sapl/templates/fluxo_proposicoes.html @@ -205,6 +205,10 @@ font-family: 'Courier New', monospace; margin: 10px 0; overflow-x: auto; + display: flex; + align-items: center; + justify-content: space-between; + gap: 15px; } .url-box code { @@ -212,6 +216,28 @@ background: none; } + .url-link { + background: #3498db; + color: white; + padding: 5px 12px; + border-radius: 4px; + text-decoration: none; + font-size: 0.85em; + white-space: nowrap; + transition: background 0.3s; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + } + + .url-link:hover { + background: #2980b9; + color: white; + text-decoration: none; + } + + .url-link i { + margin-right: 5px; + } + .comparison-table { width: 100%; border-collapse: collapse; @@ -533,7 +559,12 @@
  • Pode ser excluída
  • Somente autor vê
  • -
    URL: /proposicao/
    +
    + URL: /proposicao/ + + Acessar + +
    @@ -547,7 +578,12 @@
  • Autor pode retornar (cancelar)
  • Operador pode receber ou devolver
  • -
    URL: /proposicao/pendente/
    +
    + URL: /proposicao/pendente/ + + Acessar + +
    @@ -560,7 +596,12 @@
  • Autor pode ver motivo
  • Pode corrigir e reenviar
  • -
    URL: /proposicao/devolvida/
    +
    + URL: /proposicao/devolvida/ + + Acessar + +
    @@ -574,7 +615,12 @@
  • Protocolo gerado (se configurado)
  • Pode tramitar e ser votada
  • -
    URL: /proposicao/recebida/
    +
    + URL: /proposicao/recebida/ + + Acessar + +
    @@ -589,7 +635,10 @@

    PARLAMENTAR

    1. Cria Proposição

    - /proposicao/create + /proposicao/create + + Acessar +
    @@ -623,7 +672,10 @@

    3. Operador Recebe

    Via código ou lista de pendentes

    - /proposicao/receber/ + /proposicao/receber/ + + Acessar +
    @@ -657,7 +709,10 @@

    MATÉRIA LEGISLATIVA

    PL nº X/2025 criada

    - /materia/{id}/ + /materia/{id}/ + + Ver Lista +
    @@ -712,7 +767,12 @@

    Criar o Parlamentar

    -
    URL: /parlamentar/create
    +
    + URL: /parlamentar/create + + Acessar + +

    Dados:

    • Nome Completo: "João da Silva"
    • @@ -727,7 +787,12 @@

      Criar Usuário do Sistema

      -
      URL: /sistema/usuario/create
      +
      + URL: /sistema/usuario/create + + Acessar + +

      Dados:

      • Username: joao.silva
      • @@ -739,7 +804,12 @@

        Vincular Usuário ao Autor

        -
        URL: /sistema/usuario/{id}/edit
        +
        + URL: /sistema/usuario/{id}/edit + + Ver Lista + +

        No campo "Autor", selecione: "João da Silva"

        Resultado:
        @@ -763,7 +833,12 @@

        Criar Nova Proposição

        -
        URL: /proposicao/create
        +
        + URL: /proposicao/create + + Acessar + +

        Formulário:

        • Tipo: Projeto de Lei
        • @@ -810,7 +885,12 @@

          Ver Proposições Pendentes

          -
          URL: /proposicao/pendente/
          +
          + URL: /proposicao/pendente/ + + Acessar + +

          Lista todas proposições enviadas aguardando recebimento

          Informações mostradas:

            @@ -825,7 +905,12 @@

            Receber Proposição

            Opção A: Via código do recibo

            -
            URL: /proposicao/receber/
            +
            + URL: /proposicao/receber/ + + Acessar + +

            Insira o código e clique em "Receber"

            Opção B: Via lista de pendentes

            @@ -914,18 +999,22 @@ Criar proposição /proposicao/create + Minhas proposições /proposicao/ + Devolvidas /proposicao/devolvida/ + Recibo /proposicao/recibo/{id} + Dinâmica @@ -940,18 +1029,22 @@ Receber proposição /proposicao/receber/ + Pendentes /proposicao/pendente/ + Recebidas /proposicao/recebida/ + Matérias /materia/ + @@ -965,14 +1058,14 @@

            Antes de usar o fluxo de proposições, configure:

              -
            • Casa Legislativa em /sistema/casa-legislativa/
            • -
            • Legislatura em /sistema/parlamentar/legislatura/
            • -
            • Tipos de Proposição em /sistema/materia/tipoproposicao/
            • -
            • Tipos de Matéria em /sistema/materia/tipo/
            • -
            • Regimes de Tramitação em /sistema/materia/regimetramitacao/
            • -
            • Parlamentares em /parlamentar/create
            • -
            • Usuários em /sistema/usuario/create
            • -
            • Vincular Usuários a Autores em /sistema/usuario/{id}/edit
            • +
            • Casa Legislativa em /sistema/casa-legislativa/
            • +
            • Legislatura em /sistema/parlamentar/legislatura/
            • +
            • Tipos de Proposição em /sistema/materia/tipoproposicao/
            • +
            • Tipos de Matéria em /sistema/materia/tipo/
            • +
            • Regimes de Tramitação em /sistema/materia/regimetramitacao/
            • +
            • Parlamentares em /parlamentar/create
            • +
            • Usuários em /sistema/usuario/create
            • +
            • Vincular Usuários a Autores em /sistema/usuario/{id}/edit
            diff --git a/sapl/urls.py b/sapl/urls.py index 985d655a2..5f90008c5 100644 --- a/sapl/urls.py +++ b/sapl/urls.py @@ -108,14 +108,17 @@ if settings.DEBUG: # Make the rate limiter return 429 (Too Many Requests) instead of 403 (Forbidden Access) def custom_permission_denied_view(request, exception=None): - from django.http import HttpResponse, HttpResponseForbidden + from django.http import HttpResponse + from django.shortcuts import render from ratelimit.exceptions import Ratelimited if isinstance(exception, Ratelimited): resp = HttpResponse('Too many requests', status=429) resp['Retry-After'] = '60' return resp - return HttpResponseForbidden('Forbidden') + + # Renderiza o template 403.html customizado + return render(request, '403.html', status=403) handler403 = custom_permission_denied_view