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 deGuardiantem uma instância deUser, 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.
- 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
ApplicationControllergerencia um atributoguardianrefletindo a solicitação/cliente atual e o fornece aos serializadores como seuscope, então oGuardianatual está disponível quando necessário (exceto quando não está[1])- Existem lugares onde um
Guardianpronto 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).