2010-07-06 6 views
2

j'authentifie actuellement que les utilisateurs peuvent modifier leur propre contenu uniquement par:Ruby on rails plus élégante façon d'authentifier les utilisateurs peuvent modifier que leur propre contenu

@posts = current_user.posts.find(params[:id]) 

est-il un moyen plus facile de le faire à travers tous les contrôleurs?

J'ai un before_filter qui nécessite un utilisateur doit être connecté, mais il ne vérifie pas qui est l'utilisateur individuel. Je me demande s'il existe une solution plus élégante qui nécessiterait simplement une modification de la méthode before_filer plutôt qu'une méthode current_user avant chaque modèle à protéger.

Répondre

0

J'ai travaillé avec un framework à un moment donné pour vous permettre de mettre des conditions obligatoires dans les requêtes find, mais je ne pense pas que cela soit (nativement) possible avec Rails. Peut-être avec un plugin.

Cependant, vous aurez parfois besoin d'interroger au-delà du contexte d'un seul utilisateur, vous aurez donc besoin d'un moyen de surcharger cela, éventuellement avec le paramètre: except du before_filter. Mais alors vous devez vous rappeler current_user sur les choses dans les méthodes excepté que do besoin d'être spécifique à l'utilisateur, et oublier de le spécifier pourrait être très dangereux.

Vous pourriez économiser un peu de frappe pour la grande majorité des cas en remplaçant la fonctionnalité de recherche du modèle d'une manière ou d'une autre, mais vous allez également rendre les exceptions extrêmement moche et potentiellement dangereuses.

1

CanCan est un autre joyau qui offre des fonctionnalités d'autorisation. Tout est géré dans un fichier ruby ​​et peut ensuite être incorporé dans les contrôleurs avec une ligne. Il y a également un certain nombre d'aides de vue ainsi vous pouvez employer <% if can? :update, @article %> dans vos points de vue.