1

ここではほとんど問題はありませんが、管理者ユーザーを適切な場所にルーティングできないようです。デバイスをセットアップし、列管理者を追加してブール値として設定しました。次に、ユーザーを admin => true に更新し、コンソールでこれを確認しました。

アプリにログインすると、ユーザーはあるページにルーティングされ、管理者ユーザーは別のページにルーティングされる必要があります。

  authenticated :current_admin_user do
  root :to => 'book#searchbook'
  end

  authenticated :user do
   root :to => 'search#index'
  end

  root :to => 'main#index'

ただし、管理者ユーザーとしてログインすると、通常のユーザーのように「search#index」にルーティングされます。管理者ユーザーを「book#searchbook」にルーティングするにはどうすればよいですか。これまでにこれで問題が発生したことはありません

どんな助けでも大歓迎

編集

わかりましたので、さらに調査した後、管理者ユーザーの after_sign_in_path を指定する必要があります。これまでのところ、これがあります

def after_sign_in_path_for(resource)
  if current_admin_user
searchbook_path
  else
root_path
end
end

それでもユーザーログインページに誘導されます

ありがとう

4

2 に答える 2

2

わかりましたので、私がかなり欠けていたようです。他の誰かがこのような問題を以前に抱えていた場合、私がやったことは次のとおりです

私が追加したユーザーモデルで

def is_admin?
 self.admin == 1
end

そして、アプリケーションコントローラーにこれらのメソッドを追加しました

  def authenticate_admin_user!
  authenticate_user!
    unless current_user.admin?
    flash[:alert] = "This area is restricted to administrators only."
    redirect_to root_path
  end
 end

def current_admin_user
  return nil if user_signed_in? && !current_user.admin?
  current_user
end

def after_sign_in_path_for(resource)
if current_user.admin?
searchbook_path

else
 root_path
end
end

そして、管理者ユーザーのみがアクセスできるコントローラーに before_filter を追加しました

before_filter :authenticate_admin_user!

これが同じ状況の他の誰かに役立つことを願っています(そしてジェイソンレーンに感謝します)

彼は9か月前に同じ問題で私を助けてくれました...

于 2013-01-03T14:30:44.553 に答える
0

以下のコードを実装してみてください..コントローラーでこのコードを使用したので..

def after_sign_in_path_for(resource_or_scope)
  if resource_or_scope.is_a?(User)
     return root_path
  else
    return search_path
  end
end
于 2013-01-04T13:20:47.897 に答える