Question

Je veux un avant filtre comme « must_have_permission_to_write » que lorsqu'il est appelé si l'utilisateur n'a pas l'autorisation d'écrire rend un message disant: « vous ne pouvez pas faire ça! » et retour.

Le problème est que je reçois « ne peut rendre ou rediriger une fois par action » bien sûr ... comment puis-je arrêter l'exécution dans l'avant filtre? merci

Était-ce utile?

La solution

Je pense que la réponse la plus simple est d'ajouter une redirection et return false à votre méthode must_have_permission_to_write.

def must_have_permission_to_write
  unless current_user.has_permission?(something)
    redirect_to access_denied_path 
    return false
  end
end

Ensuite, créez une action pour refuser l'accès quelque part, ajoutez la route, et mettez tout ce que vous voulez dans le modèle.

Autres conseils

Il y a quelques choses que je remarquai sur les messages ici:

  • appellez render ou redirect dans un filtre avant annulerons l'action. Il y avait un moment où les rails ne le font pas, mais pour autant que je sache, c'est automatique maintenant. Je ne peux pas sembler trouver une référence à cette ligne, quelqu'un s'il vous plaît me corriger si je me trompe.
  • Utilisation « et le retour » est un excellent moyen d'annuler l'action si vous êtes réellement à l'intérieur de l'action. Dans les exemples ci-dessus les méthodes sont définies en amont du filtre (à savoir des procédés séparés) appelant « et retour » à la fin d'un procédé, est pas utile.
  • Je ne pense pas que vous devriez dire à quelqu'un « vous ne pouvez pas le faire », thats pas une pratique très sécuritaire. Si quelqu'un demande quelque chose qu'ils n'ont pas l'autorisation de, la réponse devrait être 404. En répondant comme vous donnez cette personne « curieux » trop d'informations.

Il suffit d'ajouter le and return, comme faire:

before_filter :must_have_permission_to_write

def must_have_permission_to_write
  redirect_to login_path and return unless current_user
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top