paint-brush
Como implementei a aprovação de acesso em nosso projeto de código abertopor@hacker6428749
2,868 leituras
2,868 leituras

Como implementei a aprovação de acesso em nosso projeto de código aberto

por 9m2024/07/25
Read on Terminal Reader

Muito longo; Para ler

Makaut Buddy, uma plataforma de compartilhamento de notas para estudantes universitários, enfrentou desafios no gerenciamento seguro de uploads de usuários. Este artigo explica como a implementação do controle de acesso baseado em função (RBAC) usando Permit.io resolveu o problema, garantindo que apenas usuários autorizados possam fazer upload de conteúdo, aumentando assim a segurança da plataforma.
featured image - Como implementei a aprovação de acesso em nosso projeto de código aberto
undefined HackerNoon profile picture
0-item
1-item


Há alguns dias, alguns de meus colegas me abordaram sobre um problema com um aplicativo de código aberto chamado Makaut Buddy , que é uma plataforma de compartilhamento de notas projetada para nossa universidade, com o objetivo de ajudar os alunos a compartilhar notas principais, questões de exames anteriores e tutoriais do YouTube de forma eficiente. .


Embora tivessem desenvolvido com sucesso um sistema para carregar recursos, encontraram o desafio de garantir que apenas indivíduos autorizados pudessem carregar conteúdo.


Conforme mostrado na demonstração abaixo, qualquer usuário pode criar um recurso após se inscrever. Isso representou um grande problema porque não conseguimos regular o que os usuários enviam; alguns podem até ter carregado conteúdo prejudicial ou perturbador.

Inicialmente, eles definiram uma função de administrador e concederam privilégios administrativos a um grupo seleto de indivíduos. No entanto, à medida que o número de funções aumentou, o código tornou-se cada vez mais complexo e difícil de gerir.


Foi então que tive a ideia de escrever este artigo para aumentar a conscientização sobre maneiras eficientes de gerenciar autorização usando um modelo de controle de acesso baseado em função (RBAC) com a ajuda de ferramentas de autorização de terceiros, como Permit.


Além de implementar o RBAC, também introduzimos um sistema de aprovação de solicitação de acesso. Este sistema garante que qualquer usuário que queira fazer upload de conteúdo deve primeiro solicitar acesso, que um administrador pode então aprovar ou negar. Essa camada adicional de segurança nos ajuda a manter a integridade do conteúdo do Makaut Buddy.


Neste artigo, usei JavaScript como linguagem de programação e Next.js como estrutura. No entanto, os conceitos discutidos aqui não são específicos da linguagem e você pode implementá-los na sua linguagem de programação preferida.


Ao final deste artigo, você saberá como implementar um modelo RBAC básico em sua aplicação.


Dito isso, vamos mergulhar!


O que é autorização?

Lembra daquelas manhãs correndo para a escola? O segurança que verifica sua identidade é um exemplo perfeito de autenticação. Eles estão verificando sua identidade como estudante autorizado no campus. Mas esse é apenas o primeiro passo. Mesmo depois de ser identificado, você não entraria em qualquer sala de aula, certo? É aí que entra a autorização.


Pense no seu horário de aula como sua autorização. Ele concede acesso a áreas específicas (salas de aula) com base na sua função (aluno matriculado naquela turma). Você não estaria autorizado a entrar na sala dos professores ou na seção restrita da biblioteca – mesmo sendo um estudante (autenticado).


A diferença entre autenticação e autorização é como perguntar “Quem é você?” vs “O que você tem permissão para fazer?”

Por que precisamos de um modelo RBAC para autorização 🤔?

A autorização é importante em todas as organizações, pois impede que indivíduos executem ações que não estão autorizados a realizar. Isso garante a segurança da organização e ajuda a prevenir perdas.


Vamos ilustrar a afirmação acima com um exemplo:

Em uma empresa, existem alguns engenheiros seniores com profunda experiência e alguns estagiários ainda aprendendo o básico. Você pode imaginar o desastre que causaria se tanto o engenheiro sênior quanto o estagiário tivessem o mesmo nível de permissões. Os estagiários que ainda estão aprendendo podem, sem saber, cometer algum erro pelo qual a empresa terá que pagar. Em situações como essas, o modelo de controle de acesso baseado em função funciona melhor porque as permissões não são atribuídas a indivíduos, em vez disso, são atribuídas a funções. Por exemplo, apenas um engenheiro sênior ou líder técnico pode excluir recursos, enquanto todos os estagiários só podem visualizar e gerenciar recursos.


A seguir, vamos ver como podemos implementar o RBAC em uma aplicação.

Como implementar o RBAC em um aplicativo:

1. Defina funções e permissões

Primeiro, precisamos definir funções e atribuir permissões a cada função.

Nota: Uma função é a posição ou finalidade que alguém ocupa em uma organização. Precisamos de funções para que possamos diferenciar os indivíduos com base nas permissões ou privilégios atribuídos a essa função.

2. Atribuir funções aos usuários

Precisamos de uma maneira de atribuir uma função a cada usuário do aplicativo. Isso geralmente é feito após o usuário se inscrever.

3. Crie uma API de autorização

Precisamos de uma API em nosso back-end que receba a operação que um usuário deseja realizar e verifique a autorização do usuário. O diagrama abaixo lhe dará uma melhor compreensão:



No entanto, não vamos implementar todo o modelo do zero. Em vez disso, usaremos uma ferramenta de autorização de terceiros chamada Permit, que tornará todo o processo de estabelecimento de autorização muito tranquilo e eficiente para nós, para que você possa trabalhar nos recursos que realmente importam.


O diagrama abaixo mostra como aproveitaremos o Permit para implementar o RBAC em nossas aplicações:


Implementando o modelo RBAC

Nesta seção, percorreremos as etapas para implementar o controle de acesso baseado em função (RBAC) usando Permit.


Etapa 1: crie uma conta de permissão e um espaço de trabalho

Como estamos usando uma Permit para estabelecer um modelo RBAC, primeiro precisamos criar uma conta Permit e um espaço de trabalho:


Etapa 2: crie um recurso

Agora precisamos criar um Resource que é a entidade à qual queremos controlar o acesso em nossa aplicação.

Por exemplo, em um aplicativo de anotações, o recurso seria Notas e as ações poderiam ser Criar , Ler, Atualizar e Excluir.


Para criar um recurso:

  1. Vá para a seção Política.
  2. Navegue até a guia Recursos.
  3. Crie um novo recurso preenchendo os detalhes necessários.



No exemplo acima, o nome do recurso é Notas e as ações que o usuário tem permissão para executar são Criar, Ler, Atualizar e Excluir.

Etapa 3: definir funções

Após criar o Recurso, temos que definir os papéis que existirão em nossa aplicação.


Neste caso, como o aplicativo é um aplicativo de compartilhamento de notas para uma universidade, as funções serão:

  • Admin: pode criar e ler recursos.
  • Aluno: pode ler recursos.




Etapa 4: atribuir ações às funções

Depois de criarmos ambas as funções, agora temos que atribuir as ações que cada função pode realizar em nosso editor de políticas, conforme mostrado abaixo:


Etapa 5: configurar APIs de back-end

Agora que sua conta Permit está configurada, você pode começar a criar as APIs de back-end para se comunicar com o Permit. Usaremos o SDK Node.js fornecido pela Permit. Você pode encontrar o SDK para sua linguagem de programação preferida na documentação de permissão.


Sincronizar usuários e atribuir função padrão

Primeiro, precisamos ter certeza de que cada usuário que se inscreve em nosso aplicativo está sincronizado com o diretório de permissão e recebe uma função padrão de Aluno.


Para fazer isso, precisamos criar uma API backend conforme mostrado abaixo:

Esta API faz duas coisas:

  • Inicializa a API de permissão.
  • Cria um novo usuário usando a API createUser .
  • Atribui uma função padrão usando a API assignRole .



Você pode ler mais sobre todas as APIs que o Permit fornece em documentos de permissão


Obtenha a função do usuário

Em seguida, precisamos criar uma API de backend que obtenha a função do usuário do Permit.io e a envie de volta ao frontend.

A API mostrada abaixo obtém o usuário usando permit.api.users.get(user_key)



Esta API obtém a função de usuário com a qual podemos manipular nossos componentes front-end para permitir que apenas pessoas com funções especiais possam vê-la.


Você também pode verificar a função permit.check() para verificar se um usuário com uma determinada função tem permissão para realizar uma operação.

Com isso, implementamos com sucesso um modelo RBAC usando Permit. Agora podemos integrar as rotas de back-end com a estrutura de front-end ou biblioteca de sua escolha para concluir a configuração.

Implementando Sistema de Aprovação de Acesso:

Para completar nossa configuração, precisamos de um componente que permita aos usuários solicitar atualizações de funções:

  • Um usuário normal sem privilégios de administrador pode visualizar o elemento de permissão e solicitar privilégios de administrador.



  • Um usuário administrador pode aprovar ou negar solicitações recebidas de atualizações de função de outros usuários.


Passo 1: Crie um Elemento de Permissão

Os Elementos de Permissão fazem parte do “Permit Share-If”, que é um conjunto de componentes de UI pré-construídos e incorporáveis que facilitam o compartilhamento de acesso em aplicativos. Projetados para fornecer controle de acesso totalmente funcional, eles tornam a delegação de gerenciamento de permissões aos seus usuários simples e segura.


  • Para implementar isso, primeiro precisamos criar um elemento de permissão:
    • Vá para a guia Elementos no Painel de Permissões.
    • Clique em Criar elemento na seção Gerenciamento de usuários.



  • Em seguida, temos que preencher o formulário com as informações necessárias conforme mostrado abaixo
    • Torne a função Admin o proprietário do espaço de trabalho.
    • Atribua a função de Aluno à seção de visualizador.
    • Defina a função padrão como Aluno.



  • Salve o elemento e crie um novo elemento em Solicitação de Acesso.:


  • Em seguida preencha as Informações para Solicitação de Acesso
    • Selecione o elemento de gerenciamento de usuários para conectar seu elemento de solicitação de acesso.
    • Clique em Criar para finalizar o elemento.



  • A seguir, editaremos o elemento de gerenciamento de usuários
    • Volte para o elemento de gerenciamento de usuários e edite-o.
    • Selecione o elemento de solicitação de acesso como componente de aprovação no gerenciamento de usuários.



É isso que criamos os elementos.

Etapa 2: Criar API de back-end para login do usuário

Antes de usar os elementos, precisamos criar uma API backend para efetuar login do usuário no elemento permit,

Observação: é importante fazer o login do usuário o mais cedo possível, de preferência logo após o cadastro.


Agora, vamos dar uma olhada no código:

Código da API veiculado no endpoint /api/v1/login_permit/?userkey=user_key :



Etapa 3: Código Frontend para Implementação de Login

O código frontend para implementar o login será semelhante a este:



É isso que configuramos nosso código.

Etapa 4: Integrar Iframes ao Frontend

Agora, só precisamos ir até o painel de permissão e copiar o iframe de gerenciamento de usuários e o iframe de solicitação de acesso, conforme mostrado abaixo:



Agora que temos o código, precisamos adicionar o iframe ao nosso frontend onde queremos mostrar os elementos aos nossos usuários, precisamos:

  • Mostre o elemento de gerenciamento de usuários para usuários com função administrativa.
  • Mostre o elemento de solicitação de acesso aos usuários com função de estudante.


Com isso, configuramos com sucesso um sistema de aprovação de acesso onde os usuários podem solicitar atualizações de funções e os administradores podem aprovar ou negar essas solicitações.


Demonstração do RBAC em um aplicativo de compartilhamento de notas

  • Demonstração: acesso de administrador ao widget de upload

Esta demonstração mostra como um usuário com a função "Administrador" pode acessar o widget de upload



  • Demonstração: restrições de função do aluno e solicitação de acesso

Esta demonstração ilustra como um usuário com a função "Aluno" não pode ver o widget de upload e pode solicitar uma atualização para a função "Administrador":


  • Demonstração: Aprovando atualização de função

Esta demonstração mostra como usuários privilegiados podem aprovar solicitações de atualização de função:


  • Demonstração: acesso de função atualizado ao widget de upload

Esta demonstração demonstra como um usuário, após ser atualizado de "Aluno" para "Admin", obtém acesso ao widget de upload

Conclusão

É isso!


Obrigado por ler até aqui.


Neste tutorial, exploramos a autorização e entendemos porque a autorização é muito importante em qualquer aplicação. Também vimos como podemos instalar e configurar Permit para proteger o aplicativo e controlar o acesso do usuário com base em suas funções.


Este artigo é apenas a ponta do iceberg da autorização e do modelo RBAC. Você pode consultar ABAC e ReBAC para obter uma autorização mais refinada.