Mettre en place une identification avec rôles sur une application Ruby on Rails

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, :only => [: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 ! :-)

This entry was posted on Vendredi, juillet 4th, 2008 at 14:00 and is filed under Développement. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Post a Comment