私のアプリケーションには、ユーザー部分と/admin部分があります。アカウント(顧客など)と管理者の2つのモデルがあり、アカウントと管理者を別々に認証する必要があります。管理者はアカウントの一部にアクセスしたり、アカウントは管理者エリアにアクセスしたりしないでください。私に解決策はありますか、それともユーザーと管理者向けに2つの異なるアプリケーションを作成し、merb 1.1を待って、それらを1つのアプリにマウントする必要がありますか?何か案は?
1 に答える
あなたの質問は私には非常に興味深いようです、私は最初に同じ問題を抱えていました。だから、私はあなたがあなたのアプリの構造に応じて1つを選択できるさまざまな解決策を提案することができます。
すべてのユーザーが1つのクラスに属しているが、特別なフィールド(UserClass =(:client、:moderator、:adminなど)がある場合は、アプリの変更を最小限に抑えることができます。コントローラー/ビューのユーザークラスパラメーターを確認するだけです。それはあなたにとって良い考えではないと思います。
ベストプラクティス-Merb認証戦略を使用する。非常に柔軟なメカニズムなので、操作したいクラスを選択できます。
たとえば、ClientAuth、AdminAuthの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
戦略に異なる認証クラス(Admin、Client)を設定したからといって、それに関する情報を取得できます。session.user.class(オブジェクトのクラス名を見つけるための基本的なrubyメソッドです)
ここにいくつかの便利なリンクがあります: