ユーザー認証と権限のためにDeviseとCancanを実装しています。特定の機能へのアクセスが許可されていないときにユーザーをログインページにリダイレクトできないことを除いて、これまでのところすべてうまく機能しています.
私のテストは次のとおりです。
feature 'A signed in user' do
before(:each) do
user = FactoryGirl.create(:user)
visit "/login"
fill_in "user_email", :with => user.email
fill_in "user_password", :with => "ilovebananas"
click_button "Sign in"
end
scenario 'should not have access to admin dashboard' do
visit '/admin'
page.should have_content 'Log in'
end
end
そして、次の失敗が発生します。
Failures:
1) A signed in user should not have access to admin dashboard
Failure/Error: visit '/admin'
CanCan::AccessDenied:
You are not authorized to access this page.
明確にするために、ログインページへのリダイレクトを除いて、これまでのところすべての権限管理が期待どおりに機能しています。
設定方法は次のとおりです。
アプリケーションコントローラー:
check_authorization :unless => :devise_controller? # Cancan
rescue_from CanCan::AccessDenied do |exception|
redirect_to login_path, alert: exception.message
end
ユーザーコントローラー
class UsersController < ApplicationController
load_and_authorize_resource # Cancan
def queue
...
end
...
end
管理者コントローラー
class AdminController < ActionController::Base
authorize_resource :class => false # Cancan, used because AdminController doesn't have an associated model
...
end
アビリティ.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user, not logged in
can :queue, User
if user.has_permission? :super_admin
can :manage, :all
elsif user.has_permission? :network_admin
end
end
end
私は何が欠けていますか?