使用Ruby 1.8.7和Rails 3.2.13,我有一个管理员“部分”,其中有一个BaseController
。我想将几乎所有页面限制为仅限登录用户。非登录用户可以看到的唯一页面是登录,忘记密码等。目前我只是保留一个“开放”的控制器和操作列表,但我认为有更好的方法。
class Admin::BaseController < ApplicationController
@@non_authorized_paths = [
{ :controller => "admin/account" , :actions => [ "login", "login_post", "logout", "forgot_password", "forgot_password_post", "reset_password", "reset_password_post" ]}
]
layout "admin/layouts/admin"
before_filter :authorized?
def authorized?
if (session[:user] != nil || @@non_authorized_paths.any? {|o| o[:controller] == params[:controller] && o[:actions].any? { |a| a == params[:action] } })
return
end
flash[:warning] = "You should login before doing that."
redirect_to :controller => "admin/account", :action => "login"
end
end
基本上,如果用户已经过身份验证,或者他们正在访问的控制器/操作位于@@non_authorized_paths
列表中,则不会发生重定向。
答案 0 :(得分:1)
before_filter :authorized?, :except => ['login', 'login_post', 'logout', etc.]
这些操作是否在sessions_controller中?您应该能够将之前的过滤器添加到该类,让它skip_before_filter
对您关注的操作。您可以使用:only
或:except
来缩短列表。