我正在为Spree创建扩展 . 它允许多个商店,所以我在管理区域添加了一个面板 .

我还创建了一个新角色:store我创建了一个AbilityDecorator,如下所示

module Spree
  class AbilityDecorator
    include CanCan::Ability

    def initialize(user)

      if user.respond_to?(:has_spree_role?) && user.has_spree_role?('store')        
        can :admin, Store
      end
    end

  end
  Ability.register_ability(AbilityDecorator)
end

问题是我可以访问使用商店用户登录的管理区域 . 它仅显示“商店”选项卡 . 但是我被重定向到/ admin / authorization_failed并且错误消失了 .

有什么想法吗?

Update:

我需要将以下行添加到我的装饰器中:

can [:admin, :index, :show], Order

因为/ admin被路由到orders_controller #index