質問
私のアプリケーションには user 部分と /admin 部分があります。アカウント (顧客など) と管理者の 2 つのモデルがあり、アカウントと管理者を別々に認証する必要があります。管理者はアカウントの部分にアクセスしてはならず、アカウントは管理領域にアクセスしてはなりません。何か解決策はありますか、それともユーザーと管理者用に2つの異なるアプリケーションを作成してからmerb 1.1を待って、それらを何らかの方法で1つのアプリにマウントする必要がありますか?何か案は?
解決
あなたの質問は私にとって非常に興味深いようですが、私も最初は同じ問題を抱えていました。したがって、アプリの構造に応じて選択できるさまざまなソリューションを提案できます。
すべてのユーザーが 1 つのクラスに属しているが、特別なフィールド (UserClass = (:client、:moderator、:admin など) など) がある場合、アプリの変更は最小限で済み、コントローラー/ビューのユーザー クラス パラメーターを確認するだけです。それはあなたにとって良い考えではないと思います。
ベスト プラクティス - 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 メソッド)
以下に役立つリンクをいくつか示します。