2

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
4

0 に答える 0