Аутентификация администратора - PullRequest
2 голосов
/ 30 мая 2011

Я следил за трансляциями Райана Бейтса, чтобы заставить систему аутентификации администратора отображать определенные параметры, если в данный момент зарегистрированный пользователь является администратором или нет.

Def admin?Метод работает, но только если я установил в коде значение true или false.Значение True отображает все параметры, а значение false скрывает их.

Я пробовал: current_user[:username] == 'dave', который работает до тех пор, пока пользователь не переходит на другого пользователя, а затем не выдает ошибку метода.

и session[:username] == 'dave'не дает ошибок, но устанавливает админ?метод false для всех пользователей, включая 'dave'.

Что я должен поместить в моего администратора?метод?В идеале я хотел бы увидеть, совпадает ли имя пользователя и пароль, а затем возвращает 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

  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

1 Ответ

2 голосов
/ 30 мая 2011

Я думаю, вы должны изучить использование CanCan, драгоценного камня, написанного Райаном Бэйтом.

https://github.com/ryanb/cancan

Вы узнаете, как устанавливать способности, и можете делать такие вещи, как:

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

Вы также сможете проверить способности на определенных моделях.

if can? :manage, Project
   # bla bla
end
...