Como EU lido com autorizações (permissões) nos meus apps

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 มี.ค. 2024
  • Diferente do que muita gente pensa, as autorizações do seu app não precisam ser complicadas de fazer.
    Aqui eu vou te explicar de um jeito simples como que eu lido na hora de codar as autorizações/permissões dos meus projetos.
    -----
    Conecte-se a 500mil devs e avance para o próximo nível com a nossa plataforma: rocketseat.com.br/
    Cadastre-se na nossa plataforma: app.rocketseat.com.br/signup
    Junte-se a mais de 392mil devs em nossa comunidade no Discord: / discord
    Acompanhe a Rocketseat nas redes sociais:
    Twitter: @rocketseat
    Facebook: @rocketseat
    Instagram: @rocketseat

ความคิดเห็น • 79

  • @vibedev.official
    @vibedev.official 3 หลายเดือนก่อน +40

    Show de bola Diegão, segunda-feira criamos um Micro-SaaS do zero e usamos estes conceito. Bem mais simples de gerir!
    Meu canal tem uma série ensinando a cria Micro-SaaS.

    • @martinsdev
      @martinsdev 3 หลายเดือนก่อน +2

      To acompanhando a série, qualidade pura

  • @viniciusnovais74
    @viniciusnovais74 3 หลายเดือนก่อน +3

    Vai parecer piada mas estava fazendo um App em Rails e chegou nessa parte de permissões esse video me deu um bom norte obrigado!

  • @teliiz
    @teliiz 3 หลายเดือนก่อน

    caraca diegao, que aula meu amigo..

  • @tarcisioteixeira9045
    @tarcisioteixeira9045 3 หลายเดือนก่อน

    Massa. E ai diegão, será que pode trazer mais videos sobre criação de API com Elysia js?

  • @esbnet
    @esbnet 3 หลายเดือนก่อน +1

    É possível também criar uma variável global "ROLE" e carregar do banco no login do usuário. Dessa forma fica até mais rápido porque já está na memória e nem precisará buscar do arquivo. Ou então, configura as roles no arquivo e carrega para uma variável global na inicialização do projeto. Pensando melhor... acho que foi essa segunda opção que o Diego falou... srsrsr

  • @marceloroldrin
    @marceloroldrin 3 หลายเดือนก่อน +5

    Ótimo conteúdo.
    Gostei da segunda solução. Só que eu teria uma tabela sim para "permissions". Imagina, a cada regra, ter que ir no código mudar.

    • @joaorodrs
      @joaorodrs 3 หลายเดือนก่อน

      Realmente um trabalho enjoado, mas isso seria o mesmo pra caso tivesse uma tabela de "permissions" não? A diferença é que seriam feitas seeders (a não ser que o front tenha a feature de editar as permissões de cada role)

    • @marceloroldrin
      @marceloroldrin 3 หลายเดือนก่อน

      @@joaorodrs não há problema em ter uma tabela.

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      Acho que seria bom para a segurança ter testes unitários e reviews das permissões

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      ​@@joaorodrs Mas usando seeders não acaba entrando no mesmo problema de performance que ele apontou?

  • @augustofernandesmarsola9284
    @augustofernandesmarsola9284 3 หลายเดือนก่อน

    incrível!

  • @user-yl7vj6hw9d
    @user-yl7vj6hw9d 3 หลายเดือนก่อน

    leram a minha mente, tava pesquisando sobre isso

  • @UmaTagPorDia
    @UmaTagPorDia 3 หลายเดือนก่อน +5

    Tu não pode criar, mas o ADM master que gerencia todo o clister de dados pode, então pensando que numa reunião alguém define que precisam de novas roles, seria gasto de tempo fazer deploy de uma nova versão do arquivo.
    A menos que se trabalhe com escrita de arquivo estático.
    Em um SaaS tu é um ADM do seu contexto, mas tem um user root que geralmente tem acesso a todos os contextos.
    Já pensou se eu for o user root e adicionar permissão de criar rolês pro seu usuário?

    • @rodrigodmpa
      @rodrigodmpa 3 หลายเดือนก่อน +1

      Penso diferente. Por ser algo que envolve segurança, é importante ter uma certa dificuldade de ser feito. Até para rastreamento e governança. Se teve alguma mudança em permissões de uma role, isso fica registrado em um commit. Além disso, na minha visão esse tipo de operação é rara de acontecer. Não acho que seja necessário criar roles todo mês por exemplo.

    • @souzaramon9522
      @souzaramon9522 3 หลายเดือนก่อน

      Criar roles faz sentido, mas criar permissions não. O código precisa "suportar" essa nova permissão

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      Concordo com o Rodrigo. Adiciono que acredito que o Diego não está supondo a existência de um root capaz de criar novas roles e permissions (e sim, gerenciar as existentes)

  • @kalilaziz8591
    @kalilaziz8591 3 หลายเดือนก่อน

    Onde essas lives acontecem? gostaria de acompanhar

  • @ojoaoalexandre
    @ojoaoalexandre 3 หลายเดือนก่อน

    Bom dia Diego! Onde encontro essa aula completa?

  • @luanfelipecosta
    @luanfelipecosta 3 หลายเดือนก่อน +1

    "A beleza da complexidade está na simplicidade"
    Parabens diego, ser ENGENHEIRO DE SOFTWARE é isso aí, a habilidade de tornar problemas complexos em coisas simples.
    Escrever código e usar frameworks é a parte mais fácil do job.
    De novo caimos no princípio de pareto. Esses 20% de tempo fazendo um bom planejamento representam 80% do valor, e os outros 80% de templo implementando correspondem a 20% do valor.

    • @UmaTagPorDia
      @UmaTagPorDia 3 หลายเดือนก่อน

      Se tu for um Dev é sim super simples, agora experimenta criar um sistema que uma.pessoa "normal" vai gerir... Vai realmente esperar que ela abra o código caso preciso adicionar ou alterar essas rolês padrões?

    • @silasbispo01
      @silasbispo01 3 หลายเดือนก่อน +1

      @@UmaTagPorDia se você está prevendo essa necessidade então faça da forma necessária ué, a questão é não criar uma solução complexa pra um problema que dá pra resolver com uma solução simples

  • @cleristonmartinscardoso2557
    @cleristonmartinscardoso2557 3 หลายเดือนก่อน

    meu mano, vejo que voce coda na velocidade da luz, estou bastante intrigado com que teclado voce trabalha. Pode mostrar pra gente?

  • @niltonschumacherfilho3368
    @niltonschumacherfilho3368 3 หลายเดือนก่อน

    Opa, acho que seria legal um vídeo atualizado de folder structure!

  • @adailsonmoreira9978
    @adailsonmoreira9978 3 หลายเดือนก่อน

    Eu concordo com o Diego, algo que ainda tenho dúvidas de como organizar é como fazer visualização personalizada tanto na saída quanto na consulta a api exemplo eu tenho um manager que a partir da empresa que ele tá ele vai trazer coisas só da empresa dele na consulta a API (ficar fazendo ifs vai tornar isso gigante) nunca consegui pensar numa arquitetura pra isso ...

    • @luanrodrigues4901
      @luanrodrigues4901 3 หลายเดือนก่อน

      Vc cria um endpoint da API que recebe um “path pram”
      GET /empresa//funcionarios
      Dessa forma é possível pegar o da empresa através da URL. No controller do endpoint vc vai fazer uma consulta simples no banco de dados:
      Select * from funcionários where empresa_id =
      😊 espero ter ajudado.

  • @adrielschmitz
    @adrielschmitz 3 หลายเดือนก่อน +4

    Rapaz, tá na hora do Diego se atualizar... o github dele ainda está com o 3g, já estamos quase indo pro 6g na vida real.

  • @EuSouAnonimoCara
    @EuSouAnonimoCara 3 หลายเดือนก่อน +2

    Exatamente como implementei na empresa, atribuindo as permissões aos papéis diretamente no código.

  • @moronipereira1649
    @moronipereira1649 12 วันที่ผ่านมา

    Essa validacao no codigo nao daria brecha pro usuario editar o codigo pelo F12 e permitir algo pelo qual nao teria acesso?

  • @vini1520
    @vini1520 3 หลายเดือนก่อน +12

    Eu so colocaria um double check na api. Pq se um hacker alterar o front , ele vira admin

    • @danielcamposdev
      @danielcamposdev 3 หลายเดือนก่อน +2

      Concordo, pois qualquer um que pegar a requisição pode consumir sem passar pelo front e burlar alguma regra de negócio

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน +6

      Acho que todas ideias que ele passou no vídeo são referentes ao backend mesmo

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +4

      Com certeza, mesmo estando no código, isso tem que ser validado tanto na API quanto no front-end! Se for criar um projeto full-stack JavaScript, você pode compartilhar o pacote de permissões entre os dois ambientes, caso contrário, pode optar por uma linguagem como JSON ou YAML para gerir as permissões.

    • @TheGusMP
      @TheGusMP 3 หลายเดือนก่อน

      Sim, uma API key resolveria esse problema: tem a API key correta? Se sim, prossegue, senão retorna erro. Essa lógica até poderia estar numa espécie de midleware.

    • @vini1520
      @vini1520 3 หลายเดือนก่อน +1

      @@TheGusMP não por completo, você tem que fazer segurança que até um desenvolvedor que saiba das informações não consiga burlar

  • @matheusroberto8158
    @matheusroberto8158 3 หลายเดือนก่อน

    Qual tema é esse do VSCODE ?

  • @PedroHenrique-jy2dg
    @PedroHenrique-jy2dg 3 หลายเดือนก่อน

    Concordo, mas a partir do momento que um user pode ter N roles no banco, obrigatoriamente vai passar a existir uma tabela roles.

  • @entrepreneurdrive
    @entrepreneurdrive 3 หลายเดือนก่อน +2

    Eu usaria CASL tanto no front quanto no Back. Fica mais semântico de entender com essa lib.

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +1

      É o que estou usando :)

  • @LewisSenpai
    @LewisSenpai 3 หลายเดือนก่อน

    Valeu Diego. Mas fiquei com uma duvida
    Usando essa estrategia, ja que a ideia é reduzir as consultas a BD em cada request do usuário, seria adequado essa role ja vir no token que vem do frontend para verificar a role do usuário ou seria melhor ter apenas o id, fazer uma consulta a BD e ai verificar a role?

    • @jaciroscar
      @jaciroscar 3 หลายเดือนก่อน

      sim, é comum botarem a role no token

  • @gabriel.pessoa
    @gabriel.pessoa 3 หลายเดือนก่อน

    e no caso de um usuário poder ter tanto uma role, quanto uma permissão específica para aquele usuário? por exemplo, o usuário tem a role "member" padrão, mas eu querer adicionar uma permission para aquele usuário sem ter que alterar a role ou criar uma nova, que tipo de autorização é essa?

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +1

      Continua sendo RBAC, mas é algo mais específico, geralmente não vemos isso de forma comum nas aplicações.

  • @pedro-canedo
    @pedro-canedo 3 หลายเดือนก่อน +1

    É disso que eu to falando, a galera quer fazer coisa mais complexa do que precisa

    • @UmaTagPorDia
      @UmaTagPorDia 3 หลายเดือนก่อน

      Queria saber quando ficou mais fácil editar o código do que ter uma interface para gerenciar uma tabela...
      A menos que faça sua interface gravar/ler o arquivo, mas aí tu entra em problemas de R/W, concorrência no arquivo, principalmente em SaaS onde tu de repente tem 100k de usuários lendo e escrevendo no arquivo.
      A engine dos bancos já prevê isso...

    • @silasbispo01
      @silasbispo01 3 หลายเดือนก่อน

      @@UmaTagPorDiamano, assista novamente 😂

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      ​​@@UmaTagPorDia Acho que vc não entendeu a proposta: o arquivo permissions.ts declara permissões constantes, que só vão subir para produção quando houver uma release.
      Não necessariamente fica mais fácil alterar as permissões, mas tem outras vantagens

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      ​​@@UmaTagPorDia Ele tá falando de editar as roles e permissões no código e subir pra produção nas releases. Não necessariamente é mais fácil de gerenciar, mas traz vantagens de performance e segurança, além de deixar a complexidade do sistema mais simples no geral.

  • @thalesedu1372
    @thalesedu1372 3 หลายเดือนก่อน

    pergunta: não seria mais facil usar um enum indicando na tabela de user qual o papel dele no sistema?

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +1

      Depende o banco usado, não existem enums.

    • @AndreLuiz-fy3ll
      @AndreLuiz-fy3ll 3 หลายเดือนก่อน

      No exemplo dele a Role tá em Membership porque em cada time você pode ter uma Role diferente. A Role da entidade do seu usuário vai ser guardada na tabela referente ao seu usuário mesmo.

  • @orafael5744
    @orafael5744 3 หลายเดือนก่อน

    Em uma arquitetura de micro serviço de autenticação? Como ficaria? (SSO)

    • @Mattias439
      @Mattias439 3 หลายเดือนก่อน

      nem me fale nisso cara, o raiva é essa historia de SSO, eu fiz um aparatir de uma lib, tentando fazer a comunicação como micro serviço e está insurpotavel.

    • @orafael5744
      @orafael5744 3 หลายเดือนก่อน

      @@Mattias439 na empresa onde atuo, tem um SSO em funcionamento autenticar as aplicações internas, agora só estou buscando formas de melhorar a parte de autorização

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      Acredito que boa parte do que ele propôs ficaria idêntico no caso de um sistema com suporte a SSO.
      Se estiver usando SAML, vc tem o serviço de autenticação separado.
      Usando SCIM, vc sincronizaria os usuários e times do diretório com os usuários e times do seu banco de dados, com provavelmente informações adicionais específicas da sua aplicação.
      A parte do "Membership" e "permissions.ts" da solução proposta seria mantida.

  • @xavierjece_oficial
    @xavierjece_oficial 3 หลายเดือนก่อน

    Qual é o site que usa para fazer os diagramas?

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +1

      tldraw

  • @cvclasher8033
    @cvclasher8033 3 หลายเดือนก่อน

    cv programmer top br abraço tmj

  • @felipemoraes3957
    @felipemoraes3957 3 หลายเดือนก่อน

    Que app é esse que está sendo usando para apresentar?

    • @fire_fisT
      @fire_fisT 3 หลายเดือนก่อน

      É um site/extensão chamado tldraw

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 3 หลายเดือนก่อน

      Não conheço, mas acho que é "tldraw"

  • @user-qq1ln1kn3o
    @user-qq1ln1kn3o 3 หลายเดือนก่อน

    o que vcs acham de cache, devo implementar cache em todas aplicacoes do backend

  • @tav1119
    @tav1119 3 หลายเดือนก่อน

    Viva a gambiarra😂

  • @oscarrafaelcampos
    @oscarrafaelcampos 3 หลายเดือนก่อน

    Alguma vez pensou em usar Keycloak?

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +1

      Já usei, mas Keycloak é incrível em funcionalidades, péssimo em customização.

  • @markfazolin
    @markfazolin 3 หลายเดือนก่อน

    Só não gostei de finalizar usando um array, usar um bitfield seria bem mais performático. Acho que vale mostrar isso aí pessoal!

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน +1

      Cada banco tem suas diferentes formas de armazenar esse tipo de informação, acho que o array fica mais educacional e, então depois, para otimização, a pessoa pode buscar outras opções.

  • @riseunk0
    @riseunk0 3 หลายเดือนก่อน

    Que bizarro, depender do próprio código pra criar permissões. Com certeza o stripe não faz assim kkkk

    • @dieegosf
      @dieegosf 3 หลายเดือนก่อน

      Nada adianta "depender" do banco de dados e o mesmo ser alimentado via seed que vem do próprio código, é justamente o que muita aplicação faz e no fim das contas o código é quem está determinando os cargos e permissões.

  • @DailyNewsInternationalShorts
    @DailyNewsInternationalShorts 3 หลายเดือนก่อน

    da pra ver diego q vc nao dorme muito deveria descansar mais ta fazendo mal isso