我在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
下的自定义操作,但行为是相同的。
谢谢!
答案 0 :(得分:2)
我也遇到了与用户类似的错误,然后我找到了一个很好的工作存储库,用于了解cancan的流程,并设计用于授权和验证角色。
请按照存储库提供的说明进行操作,并按步骤匹配您的代码步骤。
https://github.com/RailsApps/rails3-bootstrap-devise-cancan
我建议您在控制器中使用authorize_resource :class => false
或enter code here
代替load_and_authorize_resource
。我认为它会对你有帮助。
感谢。