Formulaire personnalisé d'authentification / Autorisation de régime de ASP.net MVC

Je suis en train de créer un schéma d'authentification personnalisé dans ASP.NET MVC à l'aide du formulaire d'authentification. L'idée que je pourrais avoir différentes zones du site qui sera géré - approbateur sont et général de l'utilisateur de la zone et utiliser les différentes pages de connexion, et ainsi de suite. C'est donc ce que je veux.

  1. Utilisateur l'accès restreint à la page (à droite maintenant je l'ai protégé avec un client AuthorizeAttribute)
  2. Utilisateur est redirigé vers une connexion spécifique à la page (pas sur le Web.config).
  3. D'identification de l'utilisateur sont vérifiées (via personnalisé databse régime) et que l'utilisateur se connecte.

Serait vraiment reconnaissant de toute aide!!!

C'est ce que je ce que j'ai à ce jour, et ça ne fonctionne pas:

 public class AdministratorAccountController : Controller
{
public ActionResult Login()
{
return View("Login");
}
[HttpPost]
public ActionResult Login(AdministratorAccountModels.LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
if (model.UserName == "admin" && model.Password == "pass") //This will be pulled from DB etc
{
var ticket = new FormsAuthenticationTicket(1,               //version 
model.UserName,  //user name
DateTime.Now,    //create time
DateTime.Now.AddSeconds(30), //expire time
false,           //persistent
"");             //user data
var strEncryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
Response.Cookies.Add(cookie);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
//If we got this far, something failed, redisplay form
return View(model);
}
[AdministratorAuthorize]
public ActionResult MainMenu()
{
return View();
}
public class AdministratorAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authenCookie = httpContext.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
if (authenCookie == null) return false;
var ticket = FormsAuthentication.Decrypt(authenCookie.Value);
var id = new FormsIdentity(ticket);
var astrRoles = ticket.UserData.Split(new[] { ',' });
var principal = new GenericPrincipal(id, astrRoles);
httpContext.User = principal;
return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var model = new AdministratorAccountModels.LoginModel();
var viewData = new ViewDataDictionary(model);
filterContext.Result = new ViewResult { ViewName = "Login", ViewData = viewData };
}
}
}

OriginalL'auteur Greg R | 2010-02-24