2014-01-27 54 views
0

使用Ruby 1.8.7和Rails 3.2.13,我有一個admin「section」,其中有一個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列表中,則不發生偏轉。

回答

1
before_filter :authorized?, :except => ['login', 'login_post', 'logout', etc.] 

這些操作是否在會話控制器中?你應該可以將之前的過濾器添加到該類中,讓它在你關心的動作上有skip_before_filter。您可以使用:only:except來保持列表的簡短。

+0

這是一個更好的方式 - 謝謝。 –

相關問題