Skip to content

Refatoração de Segurança (UUID v4) e Controle de Acesso Baseado em Perfis (RBAC) - #47

Merged
GiizAzul merged 13 commits into
developfrom
feature/autenticacao-usuario
Oct 5, 2026
Merged

GiizAzul merged 13 commits into
developfrom
feature/autenticacao-usuario

Conversation

@GiizAzul

@GiizAzul GiizAzul commented Oct 4, 2026

Copy link
Copy Markdown
Owner

Contexto e Objetivo

Implementação de mecanismos de segurança e estabelecimento de um sistema de Controle de Acesso Baseado em Perfis (RBAC). A arquitetura foi refatorada para utilizar um UUID v4 imutável como chave primária interna do sistema, deixando o username estritamente como nome de exibição. Adicionalmente, foi criado um gerenciador de rotas capaz de ler o escopo da conta autenticada, realizar o redirecionamento automático para o contexto correto e bloquear o acesso a painéis não autorizados.

O que foi feito

  • Identidade e Segurança (UUID): Implementação de geração automática de UUID v4 imutável (via @property id e _id) na classe base Usuario.

  • Refatoração do Banco em Memória: O ServicoAutenticacao (em base.py) passou a indexar os registros exclusivamente pelo UUID (_banco_por_id), utilizando o username apenas como um mapeamento secundário para o login.

  • Controle de Acesso e Roteamento (autorizacao.py):

    • Criação da classe ControleDeAcesso e da exceção customizada ErroAcessoNaoAutorizado (simulando HTTP 403).
    • Mapeamento dinâmico dos escopos nativos das classes (ex: BOTC_JOGADOR) para Macro Escopos (SCOPE_BCT, SCOPE_CACO, SCOPE_AUSTRALIA).
    • Implementação do despachar_apos_login para direcionar cada perfil à sua respectiva interface.
  • Auditoria nos Sistemas Eleitorais: As classes de domínio EleicaoAustralia, SistemaEleitoralBotC e EleicaoAssembleia foram refatoradas para validar quóruns, cédulas e registro de votos exigindo estritamente o User_ID, neutralizando interceptações na interface gráfica.

  • Adaptação da CLI (Interface): Remoção do controle defasado de proximo_id_usuario nas telas de sessão e cadastro. Ajuste na tela_caco.py para trafegar o usuario.id na hora de registrar os votos da assembleia.

  • Qualidade e Testes:

    • Expansão e adequação às mudanças de UUID das suítes do pytest.
    • Resolução de alertas de tipagem do linter (ruff), aplicando typing.ClassVar nos dicionários mutáveis de configuração.

Critérios de Aceite

  • Toda nova conta criada deve receber um identificador único alfanumérico/numérico imutável gerado pelo backend.
  • Todas as tabelas/estruturas de log de voto, presença em assembleia e sessões de jogo devem referenciar exclusivamente o User_ID, nunca o username.
  • O sistema deve impedir colisões de identidade mesmo que dois contextos utilizem nomes de exibição semelhantes.
  • Tentativas de forjar votos alterando nomes de exibição na camada de apresentação devem ser completamente inócuas para o banco de dados.
  • A entidade de usuário deve conter a definição do seu escopo de autorização (SCOPE_BCT, SCOPE_CACO, SCOPE_AUSTRALIA ou SCOPE_GLOBAL).
  • O fluxo de login deve inspecionar as permissões do usuário autenticado e despachar a rota inicial adequada.
  • Se um usuário tentar acessar uma rota fora do seu escopo por URL direta, o sistema deve apresentar tela de Acesso Não Autorizado (HTTP 403) e retornar ao seu contexto nativo.

Rastreabilidade

Closes #30 #27 #32 #29

@caio-unicamp caio-unicamp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Talvez seja bom checar se as bibliotecas acrescentadas não precisa colocar no requirements.txt, de resto tudo certo

@GiizAzul

GiizAzul commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

Talvez seja bom checar se as bibliotecas acrescentadas não precisa colocar no requirements.txt, de resto tudo certo

Todas as bibliotecas fazem parte da biblioteca padrão do Python, então não é necessário adicionar no requirements.txt

@caio-unicamp

caio-unicamp commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Talvez seja bom checar se as bibliotecas acrescentadas não precisa colocar no requirements.txt, de resto tudo certo

Todas as bibliotecas fazem parte da biblioteca padrão do Python, então não é necessário adicionar no requirements.txt

Nesse caso, tá aprovado

@caio-unicamp
caio-unicamp self-requested a review October 5, 2026 12:03

@caio-unicamp caio-unicamp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tudo certo

@GiizAzul
GiizAzul merged commit ec1e563 into develop Oct 5, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

2 participants