Des models qui appartiennent à des User ..

Bonjour,

Très souvent, dans mes projets, j’utilise le plugin
restful_authentication.

Et, très souvent, j’ai un certain nombre de resources qui possèdent un
user_id pour savoir à quel user appartient un élément.

Et dans ce cas, j’ai bien sûr besoin de m’assurer qu’un vilain
utilisateur ne peut pas modifier/supprimer une resource appartenant à
quelqu’un d’autre…

Pour l’instant, je fais des before_filter :protected, :only =>
[:edit, :update, :destroy]

avec, par exemple,

def protected
@nouvelle = Nouvelle.find(params[:id])
return redirect_to membres_url unless @nouvelle.user ==
current_user
end

Est-ce que vous connaissez une manière de faire cela plus rapidement,
avec un plugin bien fait et s’articulant avec celui de
restful_authentification ?

Bonne année à tous,

Je vous remercie par avance,

Pierre

Pierre :

Très souvent, dans mes projets, j’utilise le plugin
restful_authentication.

Et, très souvent, j’ai un certain nombre de resources qui possèdent
un user_id pour savoir à quel user appartient un élément.

Et dans ce cas, j’ai bien sûr besoin de m’assurer qu’un vilain
utilisateur ne peut pas modifier/supprimer une resource appartenant à
quelqu’un d’autre…

ou accéder à une ressource qu’il n’a pas le droit de voir.

Pour l’instant, je fais des before_filter :protected, :only =>
[:edit, :update, :destroy]

Pas terrible le nom de la méthode, ça masque Module#protected .

restful_authentification ?
Ben c’est ton système d’autorisation qui va assurer ça.

Il y en a de différents types, par exemple
dans Beast, Topic < AR::B a une méthode editable?

def editable_by?(user)
user && (user.id == user_id || user.admin? ||
user.moderator_of?(forum_id))
end

dans ton cas tu aurais, par exemple :

… unless @nouvelle.editable_by?(current_user)

def editable_by?(user)
user && user.id == user_id
end

après, les système d’autorisation, c’est tout un sujet,
tout dépend de ce que tu veux faire (hardcodé ? permissions
modifiables dans le panneau d’administration ? granularité
au niveau d’une classe AR::B ou d’un objet AR::B ? etc.)
mais ptêtre que je m’éloigne de ta question…

D’autre part, si tu as User has_many :nouvelles, tu peux
‘scoper’ ton find :

nouvelle = current_user.nouvelles.find params[:id]

là t’es sûr que nouvelle appartient à l’utilisateur courant.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Merci Jean-François.

On est d’accord sur l’essentiel.

Mais pas de plugin en vue qui ferait tout ça simplement ?

On Jan 5, 10:13 pm, “Jean-François Trân” [email protected]

Bonjour,

Nicolas m’a conseillé d’avoir voir du côté de Hobo:

Qui gère les permissions facilement.

Je vais regarder et je reviendrai faire un point ici :slight_smile:

A
bientôt,Pierre