質問

私のアプリケーションには user 部分と /admin 部分があります。アカウント (顧客など) と管理者の 2 つのモデルがあり、アカウントと管理者を別々に認証する必要があります。管理者はアカウントの部分にアクセスしてはならず、アカウントは管理領域にアクセスしてはなりません。何か解決策はありますか、それともユーザーと管理者用に2つの異なるアプリケーションを作成してからmerb 1.1を待って、それらを何らかの方法で1つのアプリにマウントする必要がありますか?何か案は?

役に立ちましたか?

解決

あなたの質問は私にとって非常に興味深いようですが、私も最初は同じ問題を抱えていました。したがって、アプリの構造に応じて選択できるさまざまなソリューションを提案できます。

  1. すべてのユーザーが 1 つのクラスに属しているが、特別なフィールド (UserClass = (:client、:moderator、:admin など) など) がある場合、アプリの変更は最小限で済み、コントローラー/ビューのユーザー クラス パラメーターを確認するだけです。それはあなたにとって良い考えではないと思います。

  2. ベスト プラクティス - Merb 認証戦略を使用します。非常に柔軟なメカニズムなので、使用するクラスを選択できます。

たとえば、2 つの基本的な戦略があるとします。クライアント認証、管理者認証。どちらも異なるユーザー クラス (クライアント、管理者) を使用します。必要なのは、カスタム戦略ファイルを作成し、次のようにルーターに接続することだけです。

authenticate(ClientAuth) do
  match('/profile').to(:controller => ProfileController)
end

authenticate(AdminAuth) do
  match('/admin').to(:controller => AdminController)
end

または、コントローラー内で認証を使用することもできます。

class AdminController
  :before ensure_authenticated, :with => [AdminAuth]

  def index
     ... your stuff ...
  end
end

また、次のように両方の戦略を使用して、両方のクラスの認証に 1 つのコントローラーだけを使用することもできます。

class AdminController
  :before ensure_authenticated, :with => [AdminAuth, ClientAuth]
end

戦略に対して異なる認証クラス (管理者、クライアント) を設定しているため、それに関する情報を取得できます。session.user.class (オブジェクトのクラス名を調べるための基本的な Ruby メソッド)

以下に役立つリンクをいくつか示します。

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. http://merbunity.com/tutorials/19
  3. http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
  4. http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top