O problema
A Ordway é uma plataforma de cobrança e receita. Os times financeiros dos clientes precisavam de controle fino sobre quem podia ver faturas, editar planos ou executar pagamentos, e um conjunto fixo de papéis nunca era suficiente: cada cliente queria uma divisão um pouco diferente.
O que eu fiz
Desenhei e implementei o sistema de autorização de ponta a ponta, do modelo de dados às telas administrativas, e corrigi no caminho um conjunto de problemas de configuração de produção no Heroku.
Como resolvi
As permissões são declaradas uma vez, como pares de recurso e ação. Um perfil é um conjunto nomeado de permissões, e um usuário pode ter vários perfis. As verificações são resolvidas de um cache por requisição no Redis, para que as muitas checagens de uma página não batam no banco. A interface administrativa em React permite que um administrador do cliente componha perfis sem envolver engenharia.
O que foi difícil
Tornar um modelo flexível seguro. Perfis que se sobrepõem podem conceder mais do que o pretendido, então o sistema mostra as permissões efetivas de um usuário como a união dos perfis e sinaliza ações sensíveis que vêm de mais de um perfil.
O resultado
Os clientes puderam definir papéis que correspondiam aos próprios fluxos de aprovação, e os pedidos de suporte para “mudar o que este papel pode fazer” pararam de chegar à engenharia.
Onde conferir
Interno ao produto. O modelo está descrito acima.