CanCanCan

Résumé Support

CanCanCan est une gem qui permet de mettre en place un système d'autorisation simplement à travers la création d'une classe Ability. Cette gem s'attend à la présence d'ue méthode current_user dans les controllers et s'intègre donc parfaitement avec devise.

Installation

L'installation se fait à travers le fichier gemfile

gem 'cancancan'

Ce qui donne ensuite accès au générateur

rails g cancan:ability

Ce générateur permet de créer la classe Ability dans laquelle on va pouvoir définir les permissions pour toute notre application.

class Ability include CanCan::Ability def initialize(user) user ||= User.new alias_action :create, :read, :update, :destroy, to: :crud # Pour ne pas se répéter can [:read], Post # Seul les actions :index, :show sont accessible publiquement if user.id can [:crud], Post, {user_id: user.id} # Il faut être le propriétaire d'un enregistrement pour l'éditeur end if user.admin? can :manage, :all # L'administrateur peut tout modifier end end end

Vérifier les permissions

Il est ensuite possible de vérifier une permission gràce au méthode can? et cannot?

can? :edit, @post # boolean authorize! :edit, @post # Renvoit une exception

Il est aussi possible de mettre en place un filtre pour tout un controller

class PostsController < ApplicationController load_and_authorize_resource # charge le @post et vérifie les permissions # Mais il est aussi possible de charger l'article manuellement # before_action :set_post # authorize_resource end