2011-01-20 17 views
3

私は、ウェブサービスからユーザーに関する全トラック情報を保存しようとしています。これは現在認証されているユーザーに関する情報なので、カスタムのIIdentity実装にその情報を格納することが理にかなっていると思いました。MVC2 ::カスタムIIdentityクラスはどのように使用しますか?

カスタムMagicMembershipProvider.GetUser(string id, bool userIsOnline)は、webserviceを呼び出し、すべてのフィールドが入力されたMagicMembershipUserインスタンス(部門、電話番号、その他の従業員情報)を返します。

カスタムメンバーシッププロバイダーとカスタムメンバーシップユーザーの両方が正常に動作します。は、すべてのコントローラでアクセスIPrincipal Userオブジェクトに、メンバーシップユーザー情報を入れるための最良の方法は何と

私は、IIdentity、IPrincipal、およびMVC2アプリケーションでの役割認可を使用してセキュリティのプログラムフローに取り組んでいますが、ここでは本当に苦労してメンタリングを使用することができます。そこには、部品に関するインターネットトーンの記事がありますが、全体についてはそれほど多くはありません。

編集

私の最高の推測では、これまでFormsAuthenticationServiceHttpContext.Current.Userを割り当てることです:

public void SignIn(string userName, bool createPersistentCookie) 
{ 
    if (String.IsNullOrEmpty(userName)) 
    throw new ArgumentException("Value cannot be null or empty.", "userName"); 

    try 
    { 
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
    MagicMembershipUser magicUser = _provider.GetUser("", false) 
     as MagicMembershipUser; 
    MagicIdentity identity = new MagicIdentity(userName, magicUser); 
    GenericPrincipal principal = new GenericPrincipal(identity, null); 

    HttpContext.Current.User = principal; 
    } 
    catch (Exception) 
    { 
    throw; 
    } 

    } 

答えて

1

何とどこIPrincipalユーザーオブジェクトにメンバーシップユーザー情報を入れるための最良の方法ですすべてのコントローラでアクセス可能ですか?

カスタムでは、フィルタ実装。 AuthorizeCoreメソッドをオーバーライドして基本メソッドを呼び出し、trueが返された場合はメンバーシップ・プロバイダを照会し、カスタム・マジックIDをコンテキストに注入できます。

例:

public class MagicAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (isAuthorized) 
     { 
      var username = httpContext.User.Identity.Name; 
      var magicUser = _provider.GetUser(username, false) as MagicMembershipUser; 
      var identity = new MagicIdentity(username, magicUser); 
      var principal = new GenericPrincipal(identity, null); 
      httpContext.User = principal; 
     } 
     return isAuthorized; 
    } 
} 

今残っているすべては[MagicAuthorize]の属性を使用してベースコントローラを飾るです。

+0

_providerのインスタンシエーションがありません - なぜですか? –

+0

@ScottSEA、この '_provider'変数は、認証されたユーザ情報を取得することができる何でもかまいません。 –

+0

ここでこのメソッドでインスタンス化するのは安全でしょうか? ...何らかの理由でAuthorizeCore(HttpContextBase httpContext)のために「適切なメソッドが見つからない」というエラーが表示される –

関連する問題