У меня есть объект, который содержит все данные для входа в систему, которые находятся в моем контроллере (он был запрограммирован до переключения на 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? Если нет, я мог бы хотя бы передать логическое значение от объекта, который указывает, авторизован ли пользователь или нет?
Редактировать: Мое решение основано на совете Зонненберга.
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);
}
Итак, теперь вход в систему выполняется внутри авторизации, и я могу позвонить пользователю, чтобы получить доступ к логину с контроллера.