¿Lugar adecuado para proponer un predicado de permisos?

Aquí está lo que he aprendido/deducido:

  • Guardian es, de hecho, lo que encapsula “¿Qué se le permite hacer al usuario?” (Una instancia de Guardian tiene una instancia de User, también).
  • Por lo tanto, el lugar adecuado para un predicado de permisos es simplemente como un método en Guardian (lib/guardian.rb).
    • Si el método es “¿Puede el usuario hacer Z a un objeto Xxxx?”, entonces probablemente pertenezca a uno de los archivos de mezcla XxxxGuardian (lib/guardian/...).
    • De lo contrario, va a la definición base de Guardian.
  • ApplicationController administra un atributo guardian que refleja la solicitud/cliente actual y lo proporciona a los serializadores como su scope, por lo que el Guardian actual está disponible cuando se necesita (excepto cuando no lo está[1]).
  • Hay lugares donde un Guardian listo para usar no está disponible, típicamente en una tarea de backend ejecutada por el sistema, pero si tienes un control sobre un “usuario actuante” (por ejemplo, el usuario destinatario, al generar una notificación por correo electrónico), puedes crear un guardián apropiado sobre la marcha: Guardian.new(the_user).

  1. ↩︎