5

Ich postete this question ungefähr 8 Monaten vor. Die akzeptierte Antwort berührt einige der Dinge, die Sie verpassen würden, wenn Sie nicht nach den Regeln des Standardanbieters spielen. Wenn Sie beispielsweise keinen benutzerdefinierten RoleProvider verwenden, der von RoleProvider erbt, verlieren Sie die Möglichkeit, Schnellverknüpfungen wie User.IsInRole() zu verwenden. Die Antwort bezieht sich auf solche Dinge wie "eingebaute Rohrleitungen".Was sind die positiven Gründe für die Verwendung des Standard-Mitgliedschaftsanbieters oder eines benutzerdefinierten Mitgliedschaftsanbieters?

Was ich wissen möchte, ist, wo ich eine vollständige Liste von Sachen finden kann, die auf dieser "eingebauten Klempnerarbeit" beruhen, und etwas, das zeigt, welche überschriebenen Methoden sie hinter den Kulissen aufrufen.

Zum Beispiel HttpContext.Current.User.IsInRole() ist (ich nehme an) unter Bezugnahme auf und rufe meine überschriebenen „IsUserInRole()“ Methode in meinem benutzerdefinierten Roleprovider, aber ich möchte in die Dokumentation sehen, wo es explizit angegeben, dass HttpContext.Current.User.IsInRole() tatsächlich IsUserInRole() anruft, für alle diese Methoden für alle Anbieter.

Ich verstehe, dass es schon offensichtlich sein sollte (IsInRole() und IsUserInRole() sind so ähnlich), aber meine Motivation zu fragen ist zu sehen und zu lernen über die anderen Arten von solchen Verknüpfungen, die ich ' bin mir nicht einmal bewusst. Ich habe das Gefühl, dass ich das Rad mehrmals neu erfunden habe, und ich weiß es nicht einmal.

Antwort

0

Sie sind nicht wirklich identisch, aber der von Ihnen verwendete Rollenanbieter wird wahrscheinlich die Rollensammlung des aktuellen Benutzers mit allen Rollen des Anbieters füllen.

HttpContext.Current.User ist ein IPrincipal, die Sie hier lesen können: http://msdn.microsoft.com/en-us/library/system.security.principal.aspx

Dies ist eine .NET-Konvention für die Identität in jeder .NET-Anwendung (einschließlich ASP.NET natürlich). Nur so können Sie sicher sein, dass die Implementierung von IPrincipal, die Sie verwenden, dieselbe Funktion Ihres RoleProviders aufruft, indem Sie eine Funktion verwendet, die Ihrem Provider tatsächlich beiliegt.

Rollenprovider werden per httpApplication-Objekt (http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx) instanziiert und können von einer Principal-Implementierung verwendet werden.

Blick auf die Bemerkungen Abschnitt dieses MSDN-Artikel: http://msdn.microsoft.com/en-us/library/bb340078.aspx Die Berufung der IsUserInRole der Rollenanbieter von IsInRole des Auftraggebers ist rein bis zur Umsetzung Ihres Hauptanbieter.

Verwandte Themen