2011-05-29 274 views
2

如果當前登錄的用戶是管理員或非管理員,我一直在關注瑞安貝茨的電視廣播以獲取管理員身份驗證系統以顯示某些選項。管理員身份驗證

def admin?方法的作品,但只有在代碼中將其設置爲true或false時纔有效。 True顯示所有選項並將其隱藏。

我曾嘗試過: current_user[:username] == 'dave'它的工作原理,直到用戶更改爲其他人,然後它給出了一個沒有方法錯誤。

session[:username] == 'dave'不給出錯誤,但設置管理員?方法在所有用戶包括'dave'上爲false。

我應該將什麼放入管理員中?方法?理想情況下,我希望能夠查看用戶名和passsword是否匹配,然後返回true。

任何幫助將不勝感激!

應用控制器

class ApplicationController < ActionController::Base 
    helper :all # include all helpers, all the time 
    protect_from_forgery # See ActionController::RequestForgeryProtection for details 

    helper_method :admin? 

    protected 

    def authorize 
    unless admin? 
     flash[:error] = "not authorized!" 
     redirect_to venues_path 
     false 
    end 
    end 

    def admin? 
    true 
    #false 
    end 
end 

路由

Go::Application.routes.draw do 

    get "log_in" => "sessions#new", :as => "log_in" 
    get "log_out" => "sessions#destroy", :as => "log_out" 
    get "sign_up" => "users#new", :as => "sign_up" 
    root :to => "users#new" 

    resources :sessions 
    resources :users 
end 

會話控制器

類SessionsController < ApplicationController的

def create 
    user = User.authenticate(params[:username], params[:password]) 
    if user 
     session[:user_id] = user.id 
     redirect_to venues_path, :notice => "Logged in!" 
    else 
     flash.now.alert = "Invalid username or password" 
     render "new" 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to venues_path, :notice => "Logged out!" 
    end 
end 

回答

2

我想你應該看看使用Canan,Ryan Bate寫的寶石。

https://github.com/ryanb/cancan

您將學習如何設置能力,可以做這樣的事情:

if can? :manage, :all 
    # Admin stuff 
else 
    # Non-admin stuff 
end 

你也可以檢查具體型號的能力。

if can? :manage, Project 
    # bla bla 
end 
+0

看起來就像我想要的,謝謝! – Dave 2011-05-30 08:11:43

+0

享受! CanCan 1.0非常棒,我不確定CanCan 2.0什麼時候出來,但應該很快。可以讓一切變得更加簡單。 – ardavis 2011-05-30 16:41:51