Galdino, show de bola meu caro! Seja muito bem vindo nos estudos da plataforma 🤝
No modelo de autorização, há uma função chamada can que valida as permissões dos usuários.
Correto, se trata desta função aqui.
No entanto, essa validação é feita com base em informações armazenadas no LocalStorage, o que pode ser facilmente editável.
A validação não é feita com base em informações armazenadas em LocalStorage, pois como você especulou, se este fosse o caso, seria facilmente editável.
O que você encontrou no LocalStorage é um array de features que são usados pelo frontend para a interface decidir mostrar ou não alguns recursos (por exemplo, recursos de moderação). Nenhuma destas informações são retornadas para o backend e o único fluxo neste caso é de mão única do backend para o frontend.
Então a confusão na sua avaliação pode ter acontecido porque este é o mesmo array que fica no backend, mas lá ele não é editável. Então o método authorization#can é usado apenas no backend da aplicação e que busca as informações que estão no banco de dados.
O método de autenticação + autorização que usamos é session based e difere de estratégias stateless como o JWT. E como tudo em tecnologia, uma solução não é melhor que a outra, é uma questão de contexto e tradeoff 🤝