在 Rails 3.2 应用程序中,我使用的是 Devise + CanCan。该应用程序以前仅限于登录用户访问。我正在添加能够阅读网站某些部分的访客用户/能力。
我无法理解设置它的“正确”方法,特别是控制器中需要before_filter :authenticate!
什么组合。load_and_authorize_resource
在做这个的时候,我已经把能力等级降到了最低限度。
#Ability.rb
class Ability
include CanCan::Ability
def initialize(user_or_admin)
user_or_admin ||= User.new
can :manage, :all
end
end
在无模型/静态页面 Home 控制器中
#home_controller.rb
class HomeController < ApplicationController
load_and_authorize_resource
def index
...some stuff
end
end
和
#application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :authenticate!
...more stuff
end
通过此设置,未登录的用户将被重定向到 Devise 登录页面。
如果我从应用程序控制器中删除,我会收到before_filter :authenticate!
一个错误uninitialized constant Home
activesupport-3.2.11/lib/active_support/inflector/methods.rb
如果我load_and_authorize_resource
从家庭控制器中移除,这个错误就会消失。
这对我的简化测试能力类来说没问题,但是当我开始添加角色和能力时,我需要让 CanCan 处理 Home 控制器,即需要load_and_authorize_resource
调用。
任何人都可以帮助我理解为什么在before_filter :authenticate!
删除时会发生此错误,并指出任何解释为来宾用户设置 Devise+Cancan 的“正确”方法的信息。到目前为止我发现的信息只解释了如何设置能力类,而不是如何配置设计。