Las funciones se agregan al IPrincipal del HttpContext. Puede crear un GenericPrincipal, analizar la lista de roles en el constructor y configurarlo como HttpContext.User. El GenericPrincipal ello, podrá acceder a través User.IsInRole("role")
o la [Authorize(Roles="role")]
atribuir
Una forma de hacer esto (en C#) es añadir sus papeles como una cadena separada por comas en el parámetro datos de usuario al crear el vale de autenticación
string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
userId, //user id
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
false, //do not remember
roles,
"/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
luego acceder a la lista de funciones del vale de autenticación y crear un GenericPrincipal de su Global.asax.cs
protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
HttpCookie authCookie =
Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null) {
FormsAuthenticationTicket authTicket =
FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new Char[] { ',' });
GenericPrincipal userPrincipal =
new GenericPrincipal(new GenericIdentity(authTicket.Name),roles);
Context.User = userPrincipal;
}
}
Si Klaus no hubiera respondido bien antes, le habría dado la respuesta correcta. Esta es la forma exacta en que estoy haciendo las cosas también. Gracias por la respuesta detallada. Lo siento, fue un poco tarde. –
Supongo que esto no va a funcionar para los usuarios que tienen las cookies deshabilitadas. – Omu
@Omu Puede admitir la autenticación sin cookies simplemente modificando el método Application_AuthenticationRequest() para buscar el ticket de autenticación en la URL si la cookie no está presente. La parte importante es que los roles se almacenan en el ticket de autenticación cifrado. –