(ACLs)
# book with id 1
@book = Book.find(1)
# boolean answer
can? :manage, @book
can? :read, @book
# authorisation exception
authorize! :manage @book
authorize! :read @book
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.librarian?
can :manage, Book, library_id: user.library_id
else
can :read, Book, library_id: user.library_id
end
end
endclass BooksController < ApplicationController
load_and_authorize_resource
endclass Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.librarian?
can :manage, Book do |book|
book.library_id == user.library_id
# and it's raining outside, and some other condition
end
end
end
end