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

Поделиться
HTML-код
  • Опубликовано: 27 янв 2025

Комментарии • 88

  • @vibedev.official
    @vibedev.official 10 месяцев назад +45

    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.

    • @martinzdev
      @martinzdev 10 месяцев назад +2

      To acompanhando a série, qualidade pura

  • @PedroHenrique-jy2dg
    @PedroHenrique-jy2dg 10 месяцев назад +3

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

  • @adailsonmoreira9978
    @adailsonmoreira9978 10 месяцев назад +1

    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 10 месяцев назад +2

      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.

    • @alangraton2000
      @alangraton2000 Месяц назад

      @@luanrodrigues4901 Concordo, eu faria/faço da mesma forma

  • @viniciusnovais74
    @viniciusnovais74 10 месяцев назад +4

    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!

    • @danton_Yn
      @danton_Yn 4 месяца назад

      Não pareceu piada...

  • @marceloroldrin
    @marceloroldrin 10 месяцев назад +6

    Ó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 10 месяцев назад

      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 10 месяцев назад

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

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 10 месяцев назад

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

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 10 месяцев назад

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

  • @luanfelipecosta
    @luanfelipecosta 10 месяцев назад +2

    "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 10 месяцев назад

      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 10 месяцев назад +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

  • @vini1520
    @vini1520 10 месяцев назад +15

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

    • @danielcamposdev
      @danielcamposdev 10 месяцев назад +3

      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 10 месяцев назад +7

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

    • @dieegosf
      @dieegosf 10 месяцев назад +5

      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 10 месяцев назад

      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 10 месяцев назад +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

  • @UmaTagPorDia
    @UmaTagPorDia 10 месяцев назад +6

    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 10 месяцев назад +2

      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 10 месяцев назад +1

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

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 10 месяцев назад

      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)

  • @esbnet
    @esbnet 10 месяцев назад +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

  • @thalesedu1372
    @thalesedu1372 10 месяцев назад

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

    • @dieegosf
      @dieegosf 10 месяцев назад +1

      Depende o banco usado, não existem enums.

    • @AndreLuiz-fy3ll
      @AndreLuiz-fy3ll 10 месяцев назад

      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.

  • @teliiz
    @teliiz 10 месяцев назад

    caraca diegao, que aula meu amigo..

  • @cleristonmartinscardoso2557
    @cleristonmartinscardoso2557 10 месяцев назад

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

  • @ojoaoalexandre
    @ojoaoalexandre 10 месяцев назад

    Bom dia Diego! Onde encontro essa aula completa?

  • @kalilaziz8591
    @kalilaziz8591 10 месяцев назад

    Onde essas lives acontecem? gostaria de acompanhar

  • @LewisSenpai
    @LewisSenpai 10 месяцев назад +1

    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 10 месяцев назад

      sim, é comum botarem a role no token

  • @vandsonfalcao
    @vandsonfalcao 5 месяцев назад

    Se as permissoes vao ficar no codigo, ficaria no codigo de quem front-end ou backend? colocar em apenas um serviço posibilita usar o outro servico independente das permissoes.
    se colocar no frontend como o backend iria verificar o lance de permissao? consultando o front? ai iriamos cair na precisao de uma requisicao para consultar roles.
    ficou esse furo na historia diegao.

  • @VanderleiRobertoMoretto
    @VanderleiRobertoMoretto 2 месяца назад

    Respeito a tua visão, mas há questões a se observar: acoplamento, versionamento, bater no banco se resolve com cache facilmente. Se tiver qualquer forma de pagamento ou transferência de valores já não é viável.
    Resumindo: pra MVC é uma boa escolha, mas a partir do momento que entrou em produção, não ter essas estruturas é quase certeza de débito técnico no futuro!

  • @moronipereira1649
    @moronipereira1649 7 месяцев назад +1

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

    • @ramonbsales
      @ramonbsales 6 месяцев назад

      Provavelmente, esse arquivo deve ficar no servidor e não no cliente. Dessa forma, o usuário não teria acesso a ele via F12.

  • @EuSouAnonimoCara
    @EuSouAnonimoCara 10 месяцев назад +3

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

  • @gabriel.pessoa
    @gabriel.pessoa 10 месяцев назад

    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 10 месяцев назад +1

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

  • @matheusroberto8158
    @matheusroberto8158 10 месяцев назад

    Qual tema é esse do VSCODE ?

  • @niltonschumacherfilho3368
    @niltonschumacherfilho3368 10 месяцев назад

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

  • @entrepreneurdrive
    @entrepreneurdrive 10 месяцев назад +2

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

    • @dieegosf
      @dieegosf 10 месяцев назад +1

      É o que estou usando :)

  • @andeerdacampo_dev
    @andeerdacampo_dev 3 месяца назад

    Eu já criei um projeto onde o admin podia criar as roles e personalizar todas as permissions de cada role, isso sim era enjoado kkk

  • @orafael5744
    @orafael5744 10 месяцев назад

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

    • @Mattias439
      @Mattias439 10 месяцев назад

      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 10 месяцев назад

      @@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 10 месяцев назад

      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.

    • @henriquedelben
      @henriquedelben 4 месяца назад

      Poderia pegar os roles direto do JWT/JWS, supondo q vc esta usando OAuth. O JWS validando sua assinatura já deixa subentendido que os roles estão corretos ent vc pega as roles do jwt e seta em algum tipo de variável compartilhada durante o processamento do pedido do cliente
      Pelo menos assim é a forma padrão com q o Spring em java lida c/ spring security

  • @pedro-canedo
    @pedro-canedo 10 месяцев назад +2

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

    • @UmaTagPorDia
      @UmaTagPorDia 10 месяцев назад

      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 10 месяцев назад

      @@UmaTagPorDiamano, assista novamente 😂

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 10 месяцев назад

      ​​@@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 10 месяцев назад

      ​​@@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.

  • @augustofernandesmarsola9284
    @augustofernandesmarsola9284 10 месяцев назад

    incrível!

  • @Jeferson-l6d
    @Jeferson-l6d 10 месяцев назад

    leram a minha mente, tava pesquisando sobre isso

  • @xavierjece_oficial
    @xavierjece_oficial 10 месяцев назад

    Qual é o site que usa para fazer os diagramas?

    • @dieegosf
      @dieegosf 10 месяцев назад +1

      tldraw

  • @adrielschmitz
    @adrielschmitz 10 месяцев назад +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.

  • @jogadorum7572
    @jogadorum7572 2 месяца назад

    sim, qm nunca penou pra decidir lógica de autorização, eu já penei muito. E sim, elas poderiam ter sido resolvidas de maneiras mais fáceis

  • @oscarrafaelcampos
    @oscarrafaelcampos 10 месяцев назад

    Alguma vez pensou em usar Keycloak?

    • @dieegosf
      @dieegosf 10 месяцев назад +1

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

    • @henriquedelben
      @henriquedelben 4 месяца назад

      Entre varios identity providers como o firebase auth, aws cognito e keycloak, qual ce acha melhor?

  • @felipemoraes3957
    @felipemoraes3957 10 месяцев назад

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

    • @fire_fisT
      @fire_fisT 10 месяцев назад

      É um site/extensão chamado tldraw

    • @LucasAlmeida-ef9io
      @LucasAlmeida-ef9io 10 месяцев назад

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

  • @markfazolin
    @markfazolin 10 месяцев назад +1

    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 10 месяцев назад +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.

  • @PatricioPatrick-z2q
    @PatricioPatrick-z2q 10 месяцев назад

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

  • @tav1119
    @tav1119 10 месяцев назад

    Viva a gambiarra😂

  • @riseunk0
    @riseunk0 10 месяцев назад +1

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

    • @dieegosf
      @dieegosf 10 месяцев назад

      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.

  • @cvclasher8033
    @cvclasher8033 10 месяцев назад

    cv programmer top br abraço tmj

  • @DailyNewsInternationalShorts
    @DailyNewsInternationalShorts 10 месяцев назад

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