LoginEngine : Associer un user et un article.
Voilà la dernière partie de mon tour d’horizon sur le LoginEngine ! Nous avons vu comment installer le LoginEngine, puis comment le surcharger, nous allons maintenant voir comment l’utiliser dans le cadre d’une application classique (telle qu’un petit blog.)
Prérequis
- Avoir une « mini » application foncitonnelle. (Le résultat d’un scaffold pour un modèle « article » composé d’un titre et d’un corps devrait amplement suffire !)
- Avoir installé le LoginEngineavec succès.
- Avoir compris comment fonctionnnait la surcharge. (J’utiliserai le mécanisme dans cet article mais je ne le réexpliquerai pas
) - Avoir 2 ou 3 notions de base de donnée
- Avoir … 2 minutes devant soi
Let’s go baby !
Prenons notre exemple de « mini blog », afin de savoir quel utilisateur écrit quel article la base de donnée doit prévoir de stocker l’id de l’utilisteur pour chaque article. Ainsi, si ce n’est pas déjà fait, ajouter le champs ‘user_id’ à votre table article.
$ ruby script/generate migration add_user_info_to_article
Insérez ceci dans le fichier créé :
class AddUserInfoToArticle < ActiveRecord::Migration
def self.up
add_column :articles, :user_id, :integer #libre à vous d'ajouter d'autres paramètres...
end
def self.down
remove_column :articles, :user_id,
end
end
Puis :
$ rake db:migrate
Maintenant, au sein de votre application, générer le modèle et le controller « user » pour la surcharge. Il faut ensuite indiquer au modèle « user.rb » qu’un utilisateur peut écrire de 0 à N articles. (C’est fait avec la ligne has_many)
class User < ActiveRecord::Base
has_many :articles
include LoginEngine::AuthenticatedUser
end
Et indiquer au modèle article qu’il appartient à un utilisateur :
class Article < ActiveRecord::Base
belongs_to :user
end
Pour finir, à chaque création d’un article il faut associer l’utilisateur courant (en session.). En se basant sur le scaffold du controlleur pour gérer les articles, voici ce que cela donne :
class AdminArticlesController < ApplicationController
before_filter :login_required
...
def create
@article = Article.new(params[:article])
@article.user=session[:user] # ici !
if @article.save
flash[:notice]= 'Article was successfully added.'
redirect_to :action => 'list'
else
render :action => 'new'
end
end
...
end
Ok… et c’est possible d’empécher l’accès à l’admin pour les users simples ?
Oui c’est possible
. Pour cela on va redéfinir la méthode « authorize? » du LoginEngine.
NB : J’ai mis le code dans le helper de l’article. Je ne sais pas si c’est le meilleur endroit, mais ça fonctionne.
Donc éditez votre helper, nous allons utiliser un champs existant du LoginEngine « role » non implémenté pour l’instant.
module AdminArticlesHelper
module LoginEngine
module AuthenticatedSystem
protected
# Overwrited method
# Only allow admin to enter this controller
def authorize?(user)
user.role == "admin"
end
end
end
end
Ainsi seul les utilisateurs avec le rôle « admin » pourront utiliser ce controleur !
Pour aller toujours plus loin.
Parcequ’il parait que c’est toujours mieux ailleurs, un de mes prochains articles traitera encore de la gestion d’utilisateurs. Ce sera à propos d’un système d’un autre type que je viens de découvrir : un générator appelé auth_generator.

Il est hyper bien le auth_generator de Fabien Penso. Tu perdra pas du temps à le tester
Zfred
5 fév 07 at 14:46
Oui il est effectivement très bien et si tu navigues un peu sur mon blog tu verras que je l’ai déjà testé !
En passant, j’ai aussi testé le act_as_authenticated et personnelement c’est mon préféré, il est très souple à utiliser.
Pierre Rigal
5 fév 07 at 20:48
[...] Je vais donc commencer (ou plutôt reprendre) ce tour d’horizon avec acts_as_authenticated. Je sais, j’ai déjà parlé à plusieurs reprises 1 2 3 4 de systèmes permettant de traiter l’identification avec Rails, cependant je ne pouvais pas en dire autant sans parler du plugin que j’utilise maintenant sur tout mes projets : acts_as_autenticated. [...]
Stoneageblog.com » Acts_as_authenticated : Encore un autre système d’authentification !
9 avr 07 at 21:54