2011-05-29 228 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