Rails 3.2 - 在CanCan中访问自定义操作的拒绝例外 - 但仅限于生产中

时间:2013-07-04 18:20:56

标签: ruby-on-rails cancan

我在Rails(3.2.13)上使用Ruby(1.9),使用设计和cancan进行身份验证和授权。我在控制器中进行了自定义操作,可以在开发环境中正确使用匿名用户。当我在Heroku中部署它时,同一页面抛出了“未授权”错误。我在本地设置RAILS_ENV =生产,我得到了同样的错误。但是当我将RAILS_ENV设置回开发时,它开始正常工作。

我没有看到CanCan特有的环境配置。从文档和示例中,看起来我不需要做任何其他工作。有人可以帮忙吗?这是代码:

配置/ routes.rb中

...
resources :venues do
    ...
    ...
    collection do
      get 'testaction'
    end
...

模型/ ability.rb

class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new # guest user
    if user.role? :admin
        can :manage, :all
    else
        can :testaction, Venue
    end
  end
end

控制器/ venues_controller.rb

class VenuesController < ApplicationController
    before_filter :authenticate_user!, :except => [:testaction] #tried with & w/o this line
    load_and_authorize_resource

    def testaction
        respond_to do |format|
            format.html
        end 
    end
    ...
    ...
end

我还尝试在路由中添加members而不是collections下的自定义操作,但行为是相同的。

谢谢!

1 个答案:

答案 0 :(得分:2)

我也遇到了与用户类似的错误,然后我找到了一个很好的工作存储库,用于了解cancan的流程,并设计用于授权和验证角色。

请按照存储库提供的说明进行操作,并按步骤匹配您的代码步骤。

https://github.com/RailsApps/rails3-bootstrap-devise-cancan

我建议您在控制器中使用authorize_resource :class => falseenter code here代替load_and_authorize_resource。我认为它会对你有帮助。

感谢。