Après la sortie d'ASP.net 2.0, j'ai toujours voulu utiliser Membership 2.0, qui est un outil de gestion des autorisations de site Web bien conçu. J'ai utilisé SQLProvider, aspnet_regsql pour générer les tables requises et configuré web.config. Cependant, j'ai rencontré de nombreux problèmes lors de l'utilisation réelle, notamment l'obtention de l'utilisateur actuellement connecté via Membership.GetUser() après la connexion. , le code de résultat est renvoyé. pour moi, c'était nul... Les paramètres d'authentification et d'autorisation inclus dans la configuration Web semblaient n'avoir aucun effet. Après quelques recherches, je n'ai toujours pas pu résoudre ce problème, je n'ai donc pas eu d'autre choix que d'utiliser l'adhésion, mais j'implémente le tout le processus d’authentification et d’autorisation par lui-même.
Étant donné que le contrôle de connexion n'a pas fonctionné, j'ai moi-même écrit une page login.aspx. Cette page utilise la fonction Membership.ValidateUser() pour évaluer la connexion de l'utilisateur. Une fois que l'utilisateur s'est connecté avec succès, le nom d'utilisateur de l'utilisateur est enregistré dans la session.
J'ai implémenté un objet configurable sérialisé XML, qui a la structure suivante
<?xml version="1.0"?>
<SecurityConfig xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema ">
<Emplacements des pages>
<PageLocation Location="~/admin/admin/RoleManager.aspx">
<Autoriser les rôles="Administrateur" />
</Emplacement de la page>
</PageLocations>
</SecurityConfig>
PageLocations est une collection d'objets List de PageLocation. L'emplacement dans Pagelocation contient la page à laquelle les autorisations doivent être ajoutées. Pagelocation contient un objet Allow, dont Roles, qui contient les rôles d'utilisateur qui peuvent être autorisés par la page. Ils peuvent être séparés par des virgules, afin que toutes les pages soient ajoutées à cette structure XML.
Implémentez ensuite la fonction suivante :
/// <summary>
/// Si l'accès à cette page est autorisé
/// </summary>
/// <param name="url">Chemin autorisé</param>
/// <param name="rolenames">Rôles d'autorisation</param>
/// <returns>Si autorisé</returns>
public bool isAllow (URL Uri, chaîne [] noms de rôle, contexte HttpContext)
{
string path=context.Server.MapPath(url.AbsolutePath);
PageLocation theLocation = null;
foreach (emplacement PageLocation dans pageLocations)
{
localisation des chaînes ;
strlocation=context.Server.MapPath(location.Location);
si (strlocation.ToLower() == chemin.ToLower())
{
theLocation = emplacement ;
}
}
si (l'Emplacement != null)
{
string[] rôles = theLocation.Allow.Roles.Split(',');
foreach (rôle de chaîne dans les rôles)
{
foreach (chaîne nom de rôle dans les noms de rôles)
{
si (nom du rôle == rôle)
{
renvoie vrai ;
}
}
}
renvoie faux ;
}
autre
{
renvoie faux ;
}
}
En comparant le chemin absolu de la page actuellement visitée avec le chemin absolu en XML, puis en obtenant l'objet Pagelocation décrit en XML, pour déterminer si son rôle Autoriser correspond au rôle de l'utilisateur actuel.
Étant donné que ma gestion est utilisée pour la gestion de la sécurité en arrière-plan, j'ai écrit un contrôle utilisateur pour encapsuler la classe SecurityConfig, obtenir le compte utilisateur connecté via Context.Session[], puis obtenir la connexion via Roles.GetRolesForUser(username) Le rôle de l'utilisateur , puis transmettez Context.Request.Url et les rôles dans la fonction tout à l'heure. Si l'utilisateur est autorisé, la page actuelle sera affichée. Sinon, il accédera à sa propre page de connexion ou vous demandera que vous n'avez pas une telle autorisation. .
Puisque j'utilise MasterPage, dans ce cas, il me suffit de lier ce contrôle à la page maître, afin que chaque page soit sous gestion, et d'écrire une page en arrière-plan qui édite et sérialise l'objet SecurityConfig. Cela permet d'obtenir un contrôle d'autorisation pour toutes les pages.
L'adoption de cette méthode est également une bonne idée lorsque l'adhésion ne fonctionne pas. De cette manière, elle profite non seulement des fonctions de base fournies par l'adhésion pour les utilisateurs tels que CreateUser et CreateRoles, mais répond également aux besoins de paramètres d'autorisation. seule façon de régler ce problème maintenant.
C'est la première fois que je poste sur la page d'accueil, et j'espère que quelqu'un pourra me dire dans quelles circonstances l'autorisation .net ne fonctionnera pas.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html