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.
- Utilisateur l'accès restreint à la page (à droite maintenant je l'ai protégé avec un client AuthorizeAttribute)
- Utilisateur est redirigé vers une connexion spécifique à la page (pas sur le Web.config).
- 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
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé une combinaison de code suggéré par minus4 et mon propre code ci-dessus pour créer ce scénario simplifié, cela pourrait aider quelqu'un d'autre. J'ai ajouté quelques commentaires à propos de choses qui m'ont troublé au premier abord.
OriginalL'auteur Greg R
bien là vous allez Le Code
là vous avez ActionFilters dossier ( AuthAccess.cs)
Dossier Plugins de sécurité.cs (crypter/décrypter un cookie), SessionHandler.cs (pour toutes les questions de login))
Les contrôleurs de dossier (BaseController.cs, et exampleController (vous montrer comment l'utiliser)
et le loginTable fichier SQL.
j'utilise mysql, vous devrez peut-être modifier, aussi j'utilise subsonique donc mon modèle viendrait de là
et serait dans le vide d'un dossier de modèles.
vraiment simple à utiliser leur laisse un moment pour vous, de profiter de
nan cookie modèle est ici désolé:
c'est cool a été conçu comme une base pour un bon départ heureux de vous aider
où est le code? le lien ne l'avez pas
OriginalL'auteur davethecoder
N'est-ce pas ce que les rôles sont pour?
Jetez un oeil à asp.net mvc autorisation à l'aide de rôles ou jeter un oeil à des rôles en général
Merci pour les précisions...
OriginalL'auteur spaceman
je me suis attaquée à celui-ci avant que j'ai une classe-je utiliser pour la connexion
les habitudes de connexion, lire les témoins, vérifiez cookie et ils ont un modèle qui contient
nom, prénom, email, id, userlevel
alors vous avez juste vos propres actionFilter
par exemple [CustomAuth(MinAllowedLevel=10)]
- je utiliser un baseclass pour tous mes contrôleurs afin que je puisse plus facilement un lien vers
tout mon contenu de la séance et peut alors obtenir des infos comme
je vais bob le code tommorow si vous voulez pour vous quand je suis de retour sur le royaume-UNI journée
dire 10 heures, je vous permettra d'avoir la classe pour toute la session des trucs et les
action personnalisée filtre que vous pouvez utiliser, alors vous avez besoin d'un tableau de connexions avec un userlevel champ, le meilleur avec des niveaux de 10,20,30,40 cas où vous avez besoin d'un niveau entre 1 et 2
OriginalL'auteur davethecoder