2

私はサイト全体のcancan認証システムを構築しています。私の試みを非常に簡単に検証するために、ページにアクセスしようとするたびにテストケースを初期化しています。

# application_controller.rb
class ApplicationController < ActionController::Base
  admin = Role.new(name: :admin, is_default: true)
  admin.permissions << Permission.create(action: :manage, subject_class: :all)
  admin.save
  current_user=User.create!
  # users automatically get associations to all roles with `is_default: true`

  check_authorization
end

のコントローラーだけskip_authorization_checkが私を通過させ、他のすべてのコントローラーはAuthorizationNotPerformedエラーをスローします:

CanCan::AuthorizationNotPerformed in ExampleAuthEngin::PermissionsController#index

This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check.

私は何が間違っているのですか?

4

1 に答える 1

3

コントローラ内では、load_and_authorize_resource(クラスレベルで)呼び出すか、個々のアクション内で、テスト対象のauthorize! :action, resourcewhere:actionとisを呼び出す必要があります。resourceload_and_authorize_resourceは、リソースのインスタンス変数をインスタンス化するbefore_filtersをコントローラーに追加し(インスタンス化の方法はアクションに基づいており、ロードするリソースはコントローラー名に基づいています)、ロードされたリソースを承認するためのフィルターも追加します。ヒットしているアクションに基づいて、:read、:create、:update、または:destroyのいずれかで。

あなたはここでそれについてもっと読むことができます。

于 2012-07-10T22:23:38.667 に答える