Lugar adequado para propor um predicado de permissões?

Aqui está o que aprendi/deduzi:

  • Guardian é de fato a coisa que encapsula “O que o usuário tem permissão para fazer?” (Uma instância de Guardian tem uma instância de User, também.)
  • Assim, o local apropriado para um predicado de permissão é simplesmente como um método em Guardian (lib/guardian.rb).
    • Se o método for “O usuário pode fazer Z para um objeto Xxxx?”, então ele provavelmente pertence a um dos arquivos de mixin XxxxGuardian (lib/guardian/...).
    • Caso contrário, ele vai para a definição base de Guardian.
  • ApplicationController gerencia um atributo guardian refletindo a solicitação/cliente atual e o fornece aos serializadores como seu scope, então o Guardian atual está disponível quando necessário (exceto quando não está[1])
  • Existem lugares onde um Guardian pronto não está disponível, tipicamente em uma tarefa de backend executada pelo sistema, mas se você tiver um identificador para um “usuário agindo” (por exemplo, o usuário destinatário, ao gerar uma notificação por e-mail), você pode criar um guardião apropriado na hora: Guardian.new(the_user).

  1. ↩︎