0

私は新しいRails 3アプリケーションに取り組んでいます。このアプリケーションでは、2 つの異なるタイプのリソース (管理者ガレージ) があり、両方とも異なるビューと、devise を使用した 2 つの異なるログイン画面があります。管理者はガレージを作成し、ガレージ管理者がアプリケーションにログインできるガレージのパスワードを生成できます。これまでのところ、私はこれを実装することができます。

上記の実装で私が直面している問題の 1 つは、ガレージ マネージャーがログインすると、ブラウザーで URL を変更して管理セクションを表示でき、管理ユーザーのように変更できることです。

今私が実装しようとしているのは、モデルの両方に単一のログイン/サインインフォームを用意し、誰かがログインしたときに、モデルの種類に応じてそれぞれのビューにリダイレクトすることです。また、管理者以外のすべてのユーザーが管理者セクションを使用できないように制限したいと思います。

これを実装するための私のアプローチはどうあるべきですか。認証にdeviseを使用しています。

4

1 に答える 1

1

resourceここにあるモデルの 1 つのインスタンスです。

def after_sign_in_path_for(resource) 
  return admin_route_path  if resource.is_a?(Admin)
  return garage_route_path if resource.is_a?(Garage)
end

resourceここでのモデル名の記号は次のとおりです。

def after_sign_out_path_for(resource)
  return "/admin" if resource == :admin
  return "/"      if resource == :garage
end

普通に入るapplication_controller.rb


上記の実装で私が直面している問題の 1 つは、ガレージ マネージャーがログインすると、ブラウザーで URL を変更して管理セクションを表示でき、管理ユーザーのように変更できることです。

これに関しては、認証の問題ではなく、承認の問題です。これを管理するためにデバイス内でいくつかの簡単なことを行うことができますが、管理フラグやそのような性質のものなど、2 つを区別できるようにすることができます。リダイレクトするだけでは、この問題は完全には解決されません。

cancan、宣言型承認を見てください。他にもたくさんあると思います。

于 2013-02-17T18:44:17.293 に答える