cancan パーミッションが正しく設定されていることを確認するためにいくつかのキュウリ テストを作成しようとしていますが、奇妙な問題が発生しています。
次のコードでログインすると、カピバラは期待どおりにログインしたと言います。ただし、特定のログインが必要なリソースに移動すると、CanCan の「許可されていません」というメッセージが表示されます。Capybara は、まったく同じ「アクセス拒否」ページに「ロール superadmin で testsuperadmin としてログイン」(目的のロール) を出力します。
キュウリ/カピバラではなく手動で同じページにアクセスすると、承認が付与され、すべてが正常に機能します。認証はデバイスによって処理されます。
シナリオの上に @allow-rescue を追加しようとしましたが、ActionController::Base.allow_rescue = true を features/support/env.rb に追加しようとしましたが、どちらも効果がありませんでした。
助言がありますか?これは本当に私を困惑させます。
乾杯...
#app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.role? :superadmin
can :manage, :all
elsif user.role? :admin
can :manage, [Broker, User]
elsif user.role? :staff
can :manage, Broker
elsif user.role? :broker
can :manage, Broker, :user_id => user.id
can :read, Broker
elsif user.role? :customer
can :manage, User, :id => user.id
else can :read, [Broker]
end
end
end
# features/brokers.feature
@allow-rescue
Scenario: Successfully create Broker
Given I am logged in as "testsuperadmin" with password "testpassword"
When I go to the create broker page
Then show me the page # Authorization denied here, but signed in successfully if this line moved between "Given I am logged in" ... and "When I go to to create broker page"
......
# features/steps/devise_steps.rb
Given /^I am logged in as "([^\"]*)" with password "([^\"]*)"$/ do |username, password|
#visit path_to(sign in page)
visit "/users/sign_out"
visit "/users/sign_in"
fill_in("user[username]", :with => username)
fill_in("user[password]", :with => password)
click_button("Sign in")
end
# app/controllers/brokers_controller.rb
class BrokersController < ApplicationController
load_and_authorize_resource
# ...
def new
@broker = Broker.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @broker }
end
end