2009-08-07 14 views
0

私のアプリケーションにはユーザパートと/ adminパートがあります。アカウント(顧客のような)と管理者の2つのモデルがあり、私はアカウントと管理者を別々に認証する必要があります。管理者はアカウントの一部にアクセスすべきではなく、アカウントは管理領域にアクセスしてはいけません。私のための解決策はありますか、ユーザーと管理者のために2つの異なるアプリケーションを作成してから、merb 1.1を待って何とか1つのアプリケーションにマウントする必要がありますか?何か案は?Merb認証の質問

答えて

1

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

  1. すべてのユーザーが一つのクラスに属しているが、(特別なフィールドを持っている場合UserClass =(のような:クライアント、:モデレーター:管理者など)だけでユーザークラスを確認し、アプリの変更の最小値を持っているyou`llあなたのコントローラ/ビュー内のパラメータ。

  2. ベストプラクティス - Merb認証戦略を使用することは非常に柔軟なメカニズムであり、作業するクラスを選択することができます。

たとえば、次の2つの基本的な戦略があります。C lientAuth、AdminAuthどちらも、異なるユーザークラス(クライアント、管理者)を使用します。あなたが必要とするすべて - カスタムストラテジファイルを作成し、このようなあなたのルータにそれを接続します。あなたも一つだけのコントローラを使用することができ、また

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

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

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, ClientAuth] 
end 

あなたの戦略のためにあなたのwiを別の認証クラス(管理、クライアント)を設定しているからといってそれについての情報を得ることができるでしょう:

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. :ここsession.user.class(オブジェクトのクラス名を見つけるために、基本的なルビー方法である)

    は、いくつかの有用なリンクです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