我在 Rails (3.2.13) 上使用 Ruby (1.9),使用 devise 和 cancan 进行身份验证和授权。我在控制器中有一个自定义操作,可以在开发环境中与匿名用户一起正常工作。当我在 Heroku 中部署它时,同一页面抛出“未授权”错误。我在本地设置了 RAILS_ENV=production 并且得到了同样的错误。但是当我将 RAILS_ENV 设置回开发时,它开始正常工作。
我没有看到任何特定于 CanCan 环境的配置。从文档和示例中,看起来我不需要更多的东西来完成这项工作。有人可以帮忙吗?这是代码:
配置/路由.rb
...
resources :venues do
...
...
collection do
get 'testaction'
end
...
模型/能力.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
在路由中添加自定义操作,但行为是相同的。
谢谢!