コントローラにあるすべてのログインデータを含むオブジェクトがあります(MVC3に切り替える前にプログラムされています)。
サイトに認証を追加しようとしていますが、これまでのところ、次のようになっています。
public LoginObject MyLoginObject
{
get;
set;
}
[CustomAuthorization()]
public ActionResult Index()
{
return View();
}
と
public class CustomAuthorization : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return true;
//should be return myLoginObject.IsLoggedIn;
}
}
MyLoginObjectをAuthorizeAttributeクラスに渡す方法はありますか?そうでない場合は、少なくとも、ユーザーが許可されているかどうかを指定するオブジェクトからブール値を渡すことができますか?
編集: Zonnenbergのアドバイスに基づく私の解決策。
public class LoginObject : IPrincipal // Now extends IPrincipal
{
... //old code
private class IdentityImpl : IIdentity
{
public string AuthenticationType
{
get;
set;
}
public bool IsAuthenticated
{
get;
set;
}
public string Name
{
get;
set;
}
}
public IIdentity Identity
{
get { return new IdentityImpl { AuthenticationType = "Custom Authentication", IsAuthenticated = this.IsLoggedIn, Name = this.Id}; }
}
}
次に、loginobjectのインスタンス化をCustomAuthorizationに移動しました
public override void OnAuthorization(AuthorizationContext filterContext)
{
// ... Set up LoginObject
filterContext.RequestContext.HttpContext.User = myLoginObject;
base.OnAuthorization(filterContext);
}
これで、ログインは認証内で行われ、ユーザーを呼び出してコントローラーからログインにアクセスできます。