À propos de ce tutoriel
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