Introduction
Controllers
Models
Vues
Aller plus loin
Travaux Pratiques
TP : Gestion des animauxRéservé aux membres premiums
57 min
TP : Gestion des photosRéservé aux membres premiums
46 min
TP : Création du système de FollowersRéservé aux membres premiums
52 min
Les gems utiles
Notions avancées

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