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, resource位置:action和位置。resourceload_and_authorize_resource 将 before_filters 添加到为资源实例化一个实例变量的控制器中(其中实例化的方法是基于动作的,而要加载的资源是基于控制器名称的)并且还添加了一个过滤器来对加载的资源进行授权,授权根据被击中的操作,在 :read、:create、:update 或 :destroy 上。

你可以在这里阅读更多关于它的信息。

于 2012-07-10T22:23:38.667 回答