La gemme CanCan n'est plus maintenue . Veuillez utiliser une autre bibliothèque d'autorisation telle que CanCanCan ou Pundit.
<img src="https://fury-badge.herokuapp.com/rb/cancan.png" alt="Gem Version" /> <img src="https://secure.travis-ci.org/ryanb/ cancan.png?branch=master” /> <img src="https://codeclimate.com/github/ryanb/cancan.png” />
Wiki | Documents RDO | Capture d'écran
CanCan est une bibliothèque d'autorisation pour Ruby on Rails qui restreint les ressources auxquelles un utilisateur donné est autorisé à accéder. Toutes les autorisations sont définies dans un seul emplacement (la classe Ability
) et ne sont pas dupliquées entre les contrôleurs, les vues et les requêtes de base de données.
Dans Rails 3 , ajoutez ceci à votre Gemfile et exécutez la commande bundle
.
joyau "cancan"
Dans Rails 2 , ajoutez ceci à votre fichier environnement.rb.
configuration . joyau "cancan"
Alternativement, vous pouvez l'installer en tant que plugin.
installation du plugin Rails git://github.com/ryanb/cancan.git
CanCan s'attend à ce qu'une méthode current_user
existe dans le contrôleur. Tout d’abord, configurez une authentification (telle que Authlogic ou Devise). Voir Modification des valeurs par défaut si vous avez besoin d'un comportement différent.
Les autorisations utilisateur sont définies dans une classe Ability
. CanCan 1.5 inclut un générateur Rails 3 pour créer cette classe.
rails g cancan : capacité
Dans Rails 2.3, ajoutez simplement une nouvelle classe dans 'app/models/ability.rb` avec le contenu suivant :
Capacité de classe inclure CanCan :: Capacité def initialiser ( utilisateur ) fin fin
Voir Définir les capacités pour plus de détails.
Les autorisations de l'utilisateur actuel peuvent ensuite être vérifiées à l'aide de la can?
et cannot?
méthodes dans la vue et le contrôleur.
<% si possible ? :mise à jour, @article %> <%= link_to "Modifier", edit_article_path (@article) %> <% fin %>
Voir Vérification des capacités pour plus d'informations
L' authorize!
La méthode du contrôleur déclenchera une exception si l’utilisateur n’est pas en mesure d’effectuer l’action donnée.
définitivement montrer @article = Article . trouver ( paramètres [ :id ]) autoriser! :lire , @article fin
Définir cela pour chaque action peut être fastidieux, c'est pourquoi la méthode load_and_authorize_resource
est fournie pour autoriser automatiquement toutes les actions dans un contrôleur de ressources de style RESTful. Il utilisera un filtre avant pour charger la ressource dans une variable d'instance et l'autorisera pour chaque action.
classe ArticlesController < ApplicationController load_and_authorize_resource définitivement montrer # @article est déjà chargé et autorisé fin fin
Voir Autoriser les actions du contrôleur pour plus d'informations.
Si l’autorisation de l’utilisateur échoue, une exception CanCan::AccessDenied
sera levée. Vous pouvez détecter cela et modifier son comportement dans ApplicationController
.
classe ApplicationController < ActionController :: Base Rescue_from CanCan :: AccessDenied faire | exception | redirect_to root_url , :alert => exception . message fin fin
Voir Gestion des exceptions pour plus d’informations.
Si vous souhaitez vous assurer que l'autorisation est appliquée à chaque action de votre application, ajoutez check_authorization
à votre ApplicationController.
classe ApplicationController < ActionController :: Base check_authorization fin
Cela déclenchera une exception si l’autorisation n’est pas effectuée dans une action. Si vous souhaitez ignorer cela, ajoutez skip_authorization_check
à une sous-classe de contrôleur. Voir Garantir l’autorisation pour plus d’informations.
Mise à niveau vers 1.6
Définir les capacités
Vérification des capacités
Autoriser les actions du contrôleur
Gestion des exceptions
Modification des valeurs par défaut
Voir plus
Si vous rencontrez des problèmes avec CanCan pour lesquels vous ne trouvez pas de solution dans la documentation, veuillez ajouter un problème sur GitHub ou créer un fork sur le projet et envoyer une pull request.
Pour exécuter les spécifications, vous devez appeler bundle
puis rake
. Voir la spécification/README pour plus d'informations.
CanCan s'est inspiré de déclarative_authorization et d'aegis. Un grand merci également aux contributeurs de CanCan. Voir le CHANGELOG pour la liste complète.