Nach der Veröffentlichung von ASP.net 2.0 wollte ich schon immer Membership 2.0 verwenden, ein gut ausgestattetes Tool zur Verwaltung von Website-Berechtigungen. Ich habe SQLProvider verwendet, aspnet_regsql zum Generieren der erforderlichen Tabellen verwendet und web.config konfiguriert. Bei der tatsächlichen Verwendung sind jedoch viele Probleme aufgetreten, einschließlich des Abrufens des aktuell angemeldeten Benutzers über Membership.GetUser() nach der Anmeldung. Der Ergebniscode wurde zurückgegeben Für mich war es null... Die in der Webkonfiguration enthaltenen Authentifizierungs- und Autorisierungseinstellungen schienen überhaupt keine Wirkung zu haben. Nach einigem Suchen konnte ich dieses Problem immer noch nicht lösen, sodass ich keine andere Wahl hatte, als die Mitgliedschaft zu verwenden, sondern die zu implementieren übernimmt den gesamten Authentifizierungs- und Autorisierungsprozess für sich.
Da die Anmeldesteuerung nicht funktionierte, habe ich selbst eine login.aspx-Seite geschrieben. Diese Seite verwendet die Funktion Membership.ValidateUser(), um die Anmeldung des Benutzers zu beurteilen.
Ich habe ein XML-serialisiertes konfigurierbares Objekt implementiert, das die folgende Struktur hat:
<?xml version="1.0"?>
<SecurityConfig xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema ">
<Seitenstandorte>
<PageLocation Location="~/admin/admin/RoleManager.aspx">
<Allow Roles="Administrator" />
</PageLocation>
</PageLocations>
</SecurityConfig>
PageLocations ist eine Sammlung von List-Objekten von PageLocation. Der Speicherort in Pagelocation enthält die Seite, der Berechtigungen hinzugefügt werden sollen. Pagelocation enthält ein Allow-Objekt, eines davon Roles, das die Benutzerrollen enthält, die von der Seite autorisiert werden können. Sie können durch Kommas getrennt werden, sodass alle Seiten dieser XML-Struktur hinzugefügt werden.
Implementieren Sie dann die folgende Funktion:
/// <summary>
/// Ob der Zugriff auf diese Seite erlaubt ist
/// </summary>
/// <param name="url">Autorisierter Pfad</param>
/// <param name="rolenames">Autorisierungsrollen</param>
/// <returns>Ob autorisiert</returns>
public bool isAllow(Uri url,string[] Rolenames,HttpContext context)
{
string path=context.Server.MapPath(url.AbsolutePath);
PageLocation theLocation = null;
foreach (PageLocation-Position in pageLocations)
{
String-Strokation;
strlocation=context.Server.MapPath(location.Location);
if (strlocation.ToLower() == path.ToLower())
{
theLocation = Standort;
}
}
if (theLocation != null)
{
string[] Roles = theLocation.Allow.Roles.Split(',');
foreach (String-Rolle in Rollen)
{
foreach (Zeichenfolge Rollenname in Rollennamen)
{
if (Rollenname == Rolle)
{
return true;
}
}
}
return false;
}
anders
{
return false;
}
}
Vergleichen Sie den absoluten Pfad der aktuell besuchten Seite mit dem absoluten Pfad in XML und rufen Sie dann das in XML beschriebene Pagelocation-Objekt ab, um festzustellen, ob seine Zulassen-Rolle mit der Rollensicherheitsberechtigung des aktuellen Benutzers übereinstimmt.
Da meine Verwaltung für die Hintergrundsicherheitsverwaltung verwendet wird, habe ich ein Benutzersteuerelement geschrieben, um die SecurityConfig-Klasse zu kapseln, das angemeldete Benutzerkonto über Context.Session[] abzurufen und dann die Anmeldung über Roles.GetRolesForUser(username) abzurufen. Die Rolle des Benutzers , und übergeben Sie dann Context.Request.Url und Rollen an die Funktion. Wenn der Benutzer berechtigt ist, wird die aktuelle Seite angezeigt. Andernfalls wird auf seine eigene Anmeldeseite gesprungen oder Sie werden darüber informiert, dass Sie nicht über diese Berechtigung verfügen .
Da ich MasterPage verwende, muss ich in diesem Fall nur dieses Steuerelement an die Masterseite binden, sodass jede Seite verwaltet wird, und im Hintergrund eine Seite schreiben, die das SecurityConfig-Objekt bearbeitet und serialisiert. Dadurch wird eine Berechtigungskontrolle für alle Seiten erreicht.
Die Übernahme dieser Methode ist auch dann eine gute Idee, wenn die Mitgliedschaft nicht funktioniert. Auf diese Weise werden nicht nur die Grundfunktionen genutzt, die die Mitgliedschaft für Benutzer wie CreateUser und CreateRoles bietet, sondern auch der Bedarf an Berechtigungseinstellungen erfüllt Der einzige Weg, damit umzugehen.
Dies ist mein erster Beitrag auf der Homepage und ich hoffe, dass mir jemand sagen kann, unter welchen Umständen die .net-Autorisierung nicht funktioniert.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html