Salut tous le monde,
Nicolas P. wrote:
Amicalement,
NP
Il semble que ce bout de code (ou fonction) ne soit clair pour personne
alors je vais essayer me mieux expliquer son but. Pour cela je vais
expliquer pourquoi j’en ai eu besoin et le service que cette fonction me
rend actuellement. (Il est fort possible qu’un autre system existe, mais
je ne le connai pas).
Dans mon cas, j’ai une appli avec administration et plusieurs types
dâ??utilisateurs, définis par la variable “role”:
Dans la pratique, il existe 3 parties pour cette appli:
- semi-public: consultable par tous type d’utilisateur “guest”, “admin”
ou “owner”
- admin: accessible par les “admin” ou “owner”
- certaines sections restreinte de l’admin: accessible uniquement aux
“owner”
Bref voici pour les possibilités de chaque utilisateur.
Le site ayant pour fonction de créer des articles (genre blog) je veux
être sur que personne de non autorisé n’aille poster un article.
Pour cela je souhaitai contrôler cella dans le model “article”, cela me
semble le meilleur endroit pour faire une validation.
Voici par exemple les models “user” et “article”
class User < UserRecord::Base
has_many :articles
end
class Article < ArticleRecord::Base
belongs_to :user
validates_presence_of :user
validates_associated :user
validates_method_of :user, :method => ‘role’,
:only => %w( owner admin )
end
Maintenant voyons comment ca ce passe du coté contrôleur pour ajouter un
article:
def new
@article = Article.new(params[:article])
if request.post?
@article.user = @session[‘article’]
if @article.save
flash[‘notice’] = “New article created successfully.”
redirect_to :action => ‘list’
end
end
end
Avec ce genre de code, ma fonction me permet de vérifier que la méthode
“role” de l’utilisateur postant l’article et bien équivalente à “admin”
ou “owner”, dans le cas contraire, l’article ne serra pas posté.
Voici en ce qui concerne mon utilisation actuelle.
Ceci est donc pratique pour vérifier comme ici, la présence ou
l’exclusion d’une valeur située dans la méthode d’un objet parent.
Comme par exemple dans un model image:
class Image < ImageRecord::Base
belongs_to :article
…
validates_method_of :article, :method => ‘accept_images’,
:only => %w( true ),
:message => ‘Images not allowed in this article.’
end
Ou encore par exemple avec un model “article”:
class Article < ArticleRecord::Base
belongs_to :user
…
validates_method_of :user, :method => ‘status’,
:except => %w( suspended ),
:message => "User suspended can’t post article.’
end
J’espère que ces explications vous aideront à mieux comprendre, si toute
fois il reste des flous faites le moi le savoir et je ferrai de mon
mieux pour expliquer à nouveau.
Bonne soirée,