Comme tout framework qui se respecte, Ruby on Rails ne possède aucun système d’identification en natif. Chose naturelle vu que ce genre de choses est trop dépendant de vos besoins en fonction de l’application et est difficilement réalisable de manière générique (quoi que …)
Il existe cependant divers plugins permettant de mettre en place un système d’identification de manière aisée. Je vais ici vous présenter Restful Authentication.
Pour l’installation, je vous invite à lire ce tutoriel sur railforum.
Une fois que c’est mis en place, c’est très simple ! Vos pages d’inscription, d’identification, de déconnexion, de rappel de mot de passe et de mise à jour des informations sont faites. Il n’y a plus qu’à les personnaliser. Vous les trouverez :
- contrôleur « users », action « new » : page d’inscription
- contrôleur « sessions », action « new » : page d’identification
- contrôleur « passwords », action « new » : rappel de mot de passe
- contrôleur « users », action « edit » : modification des informations de l’utilisateur
Maintenant, tentons de personnaliser un peu cela :
Ajouter un rôle
Par défaut, seul le rôle « administrateur » existe. Mais vous pouvez avoir besoin de créer d’autres rôles. Supposons ici « redactor ».
Ouvrir le fichier /lib/authenticated_system.rb
Aux alentours de la ligne 70, vous verrez :
def check_administrator_role
check_role('administrator')
end
Ajoutez une fonction pour chacun des rôles que vous désirez en la nommant « check_xx_role » et en remplacant « admin » par le nom de votre rôle dans la base de donénes.
Si vous désirez forcer un utilisateur à avoir le rôle redactor pour visualiser l’action « publish » du contrôleur « edit », placez, en haut de votre contrôleur :
before_filter :check_redactor_role,
nly => [:publish]
Il peut cependant vous arrivez d’avoir à manipuler les données de l’utilisateur dans votre contrôleur. Ou à vérifier le niveau de l’utilisateur dans celui-ci. Pour n’autoriser un rédacteur que à mettre des articles en brouillon mais l’empêcher de les publier.
Pour permettre cela, vous avez accès à l’objet current_user dans toute votre application. Il s’agit d’une instanciation du modèle User. Toutes les fonctions définies dans ce modèle y sont donc disponibles.
Vérifions donc que notre utilisateur est bien administrateur pour l’autoriser à mettre un article en état « publié ». Sinon, laissons-le en état « brouillon »
if !current_user.has_role?('administrator')
@billet.published = false
end
Ainsi, si l’utilisateur n’est pas administrateur, il pourra modifier un billet. Mais celui-ci se retrouvera alors remis hors ligne.
Restful Authentication peut permettre énormément de personnalisations, que ce soit avec des rôles ou non. La seule limite est votre imagination !





