ログインしていないユーザーがCanCanCanでURLにアクセスできないようにしたい
私の能力モデルは
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
elsif user.roles.size > 0
can :manage, User, :id => user.id
else
can :read, :all
cannot :read, :User
end
end
end
そして、私のユーザーコントローラーは
class UsersController < ApplicationController
load_and_authorize_resource
def index
@users = User.paginate(page: params[:page],:per_page => 5)
end
def new
# @user = User.new
end
...
end
ゲストユーザーとしてページにアクセスしたとき。アプリケーションコントローラーでこのコードによってログインにリダイレクトされるのではなく、ユーザーのインデックスページが表示されます
rescue_from CanCan::AccessDenied do |exception|
if user_signed_in?
flash[:error] = "Access denied!"
redirect_to root_url
else
flash[:error] = "Please Sign in"
redirect_to new_user_session_path
end
end
CanCanCan は機能し、インデックス以外のコントローラー内の他のアクションへのアクセスを停止します。