Mejor manera de aplicar permisos: ¿controlador o restricción?

Creo que necesitas un método de guardian para verificar si un usuario tiene permiso para realizar una acción determinada. Por ejemplo, can_upgrade_server?

Además, una vez que lo hagas, puedes usar el método guardian.ensure_can_upgrade_server!, que verifica la condición y lanza una excepción, lo cual creo que es exactamente lo que necesitas.