Ecco cosa ho imparato/dedotto:
Guardianè effettivamente ciò che racchiude “Cosa è permesso fare all’utente?” (Un’istanza diGuardianha anche un’istanza diUser.)- Pertanto, il posto giusto per un predicato di permessi è semplicemente come metodo su
Guardian(lib/guardian.rb).- Se il metodo è un “L’utente può fare Z a un oggetto Xxxx?” allora probabilmente appartiene a uno dei file di mixin
XxxxGuardian(lib/guardian/...). - Altrimenti, va nella definizione di base di
Guardian.
- Se il metodo è un “L’utente può fare Z a un oggetto Xxxx?” allora probabilmente appartiene a uno dei file di mixin
ApplicationControllergestisce un attributoguardianche riflette la richiesta/client corrente e lo fornisce ai serializer come loroscope, quindi ilGuardiancorrente è disponibile quando necessario (tranne quando non lo è[1])- Ci sono posti in cui un
Guardianpronto all’uso non è disponibile, tipicamente in un’attività di backend eseguita dal sistema, ma se hai in mano un “utente agente” (ad esempio, l’utente destinatario, quando si genera una notifica via email), puoi creare un guardian appropriato al volo:Guardian.new(the_user).