Después de que salió ASP.net 2.0, siempre quise usar Membership 2.0, que es una herramienta de administración de permisos de sitios web bien empaquetada. Utilicé SQLProvider, usé aspnet_regsql para generar las tablas requeridas y configuré web.config. Sin embargo, encontré muchos problemas en el uso real, incluida la obtención del usuario actualmente conectado a través de Membership.GetUser() después de iniciar sesión. para mí era nulo... Las configuraciones de autenticación y autorización incluidas en webconfig parecían no tener ningún efecto. Después de algunas búsquedas, todavía no pude resolver este problema, por lo que no tuve más remedio que usar la membresía, pero implementa el. todo el proceso de autenticación y autorización por sí solo.
Debido a que el control de inicio de sesión no funcionó, escribí una página login.aspx. Esta página utiliza la función Membership.ValidateUser() para juzgar el inicio de sesión del usuario. Una vez que el usuario inicia sesión correctamente, el nombre de usuario se guarda en la sesión.
He implementado un objeto configurable serializado XML, que tiene la siguiente estructura
PageLocations es una colección de objetos de lista de PageLocation. La ubicación en Pagelocation contiene la página a la que se deben agregar permisos. Pagelocation contiene un objeto Permitir, uno de los cuales es Roles, que contiene los roles de usuario que la página puede autorizar. Se pueden separar con comas, de modo que todas las páginas se agreguen a esta estructura XML.
Luego implemente la siguiente función:
///
/// Si se permite el acceso a esta página
///
/// Ruta autorizada
/// Roles de autorización
///
public bool isAllow(Uri url,cadena[] nombres de roles,contexto HttpContext)
{
ruta de cadena = contexto.Server.MapPath (url.AbsolutePath);
Ubicación de la página la ubicación = nulo;
foreach (ubicación de PageLocation en pageLocations)
{
estrangulación de cuerdas;
strlocation=context.Server.MapPath(ubicación.Ubicación);
si (strlocation.ToLower() == ruta.ToLower())
{
laUbicación = ubicación;
}
}
si (la ubicación! = nulo)
{
cadena[] roles = theLocation.Allow.Roles.Split(',');
foreach (rol de cadena en roles)
{
foreach (cadena nombre de rol en nombres de roles)
{
si (nombre de rol == rol)
{
devolver verdadero;
}
}
}
devolver falso;
}
demás
{
devolver falso;
}
}
Comparando la ruta absoluta de la página visitada actualmente con la ruta absoluta en xml y luego obteniendo el objeto Pagelocation descrito en xml, para determinar si su función Permitir coincide con la función de autorización de seguridad del usuario actual.
Dado que mi administración se usa para la administración de seguridad en segundo plano, escribí un control de usuario para encapsular la clase SecurityConfig, obtener la cuenta de usuario que inició sesión a través de Context.Session [] y luego obtener el inicio de sesión a través de Roles.GetRolesForUser (nombre de usuario) El rol del usuario y luego pase Context.Request.Url y roles a la función ahora mismo. Si el usuario está autorizado, se mostrará la página actual. De lo contrario, saltará a su propia página de inicio de sesión o le indicará que no tiene dicho permiso. .
Como uso MasterPage, en este caso solo necesito vincular este control a la página maestra, para que cada página esté bajo administración, y escribir una página en segundo plano que edite y serialice el objeto SecurityConfig. Esto logra el control de permisos para todas las páginas.
Adoptar este método también es una buena idea cuando la Membresía no funciona. De esta manera, no solo aprovecha las funciones básicas proporcionadas por la Membresía para los usuarios, como CreateUser y CreateRoles, sino que también satisface la necesidad de configuración de permisos. única forma de afrontarlo ahora.
Esta es la primera vez que publico en la página de inicio y espero que alguien pueda decirme bajo qué circunstancias no funcionará la autorización .net.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html