sqlroleprovider

___ tag123aspnetmvc ___ Das ASP.NET MVC Framework ist ein Open-Source-Webanwendungs-Framework und -Tooling, das eine auf Web-Anwendungen zugeschnittene Version des Model-View-Controller (MVC) -Musters implementiert und auf einer ASP.NET-Technologiegrundlage aufbaut. ___ tag123roleprovider ___ Integrierte und benutzerdefinierte Implementierungen des Rollenanbieters von ASP.NET als Teil der Mitgliedschaftsfunktion im System.Web.Security-Namespace. ___ tag123sqrroleprovider ___ hilf uns dieses Wiki zu bearbeiten ___ tag123aspnet ___ ASP.NET ist ein Framework für die Entwicklung von Microsoft-Webanwendungen, mit dem Programmierer dynamische Websites, Webanwendungen und Webdienste erstellen können. Es ist nützlich, dieses Tag in Verbindung mit dem Typ des Projekttyps zu verwenden, z. [asp.net-mvc], [asp.net-webforms] oder [asp.net-web-api]. Verwenden Sie dieses Tag NICHT für Fragen zu ASP.NET Core - verwenden Sie stattdessen [asp.net-core]. ___ qstnhdr ___ Wird der Rollenanbieter pro Anforderung zwischengespeichert? ___ qstntxt ___

Meine MVC-Anwendung nutzt die Rolle eines Benutzers an mehreren Stellen während einzelner Seitenanforderungen. Meine Frage ist, ob der Standard-SqlRoleProvider die aktuellen Benutzerrollen für die Lebensdauer einer Seitenanforderung zwischenspeichert?

Zum Beispiel verwende ich Rollen in Attributen auf Controller-Methoden:

%Vor%

und benutzerdefinierter Code

%Vor%

Wenn der Rollenanbieter keine Rollen zwischenspeichert, ist die beste Lösung, einen benutzerdefinierten Rollenanbieter zu schreiben, der von dem Standardrollenserver erbt, und überschreibt die Methoden zum einmaligen Abrufen der Rollen und zum Zwischenspeichern für die Dauer der Anforderung. Kann dies auf eine Weise geschehen, dass sowohl das Attribut "Autorisieren" als auch mein eigener Code die zwischengespeicherten Rollen verwenden?

(Falls Sie sich fragen, möchte ich die cacheRolesInCookie web.config-Option nicht verwenden, um die Rollen in Cookies zwischenzuspeichern).

Vielen Dank im Voraus für Anregungen.

[Bearbeiten, um Details aus Joes Antwort hinzuzufügen]

Ich habe System.Web.Mvc.AuthorizeAttribute dekompiliert, und die AuthorizeCore-Methode ruft die folgende Methode für jede zu prüfende Rolle auf:

%Vor%

Wenn Sie dann in System.Web.Security.RolePrincipal (was "User" oben ist) eintauchen, verwenden beide Methoden tatsächlich eine zwischengespeicherte Kopie der Rollen des Benutzers (oder füllen den Cache, wenn sie leer sind):

%Vor%

Der Cache wird als Feld auf Benutzer gespeichert, so dass seine Lebensdauer für die Dauer der Anfrage gilt.

Die Methoden finden die Rollen mit:

%Vor%

verwendet also den Rollenanbieter, den Sie für die Anwendung ausgewählt haben (Standard oder benutzerdefiniert).

    
___ answer13842364 ___

Wenn Sie %code% in einer ASP.NET- oder ASP.NET MVC-Anwendung verwenden, verweist %code% auf eine %code% , die Rollen für die Lebensdauer der Anforderung zwischenspeichert.

In einem WCF-Dienst, der ASP.NET-Rollen verwendet:

%Vor%

Das ist nicht wahr: stattdessen verweist %code% auf die interne Klasse %code% , die keine Rollen zwischenspeichert: Stattdessen ruft sie immer %code% auf.

Die sofort einsatzbereiten RoleProvider führen kein Caching durch. Dies kann zu wiederholten Verbindungen mit dem zugrunde liegenden Datenspeicher führen. Es scheint mir ein Mangel zu sein: Es wäre einfach gewesen, die Rollen beim ersten Zugriff zu cachen.

  

ist die beste Lösung zum Schreiben eines benutzerdefinierten Rollenanbieters, der von dem Standardrollenserver erbt, und überschreibt die Methoden zum einmaligen Abrufen der Rollen und zum Zwischenspeichern für die Anforderungsdauer?

Nicht erforderlich für ASP.NET oder ASP.NET MVC, könnte aber für WCF vorgesehen werden. Caching für die Request-Dauer verwendet vermutlich %code% , führt also eine Abhängigkeit von der Existenz von %code% ein, aber das ist nicht unbedingt ein Problem, außer dass Unit-Tests schwieriger werden.

  

Kann dies auf eine Weise geschehen, dass sowohl das Autorisierungsattribut als auch mein eigener Code die zwischengespeicherten Rollen verwenden?

Wenn Sie Ihre benutzerdefinierte %code% in der web.config konfigurieren, müssen Sie nichts mehr tun, damit das Attribut %code% sie verwendet.

    
___
7
Antworten

Verwenden die meisten Leute .NET SqlMembershipProvider, SqlRoleProvider und SqlProfileProvider?

Verwenden die meisten Leute .NET SqlMembershipProvider, SqlRoleProvider und SqlProfileProvider beim Entwickeln einer Site mit Mitgliedschaftsfunktionen? Oder machen viele Leute ihre eigenen Anbieter oder sogar ihre eigenen Mitgliedschaftssyst...
25.06.2009, 14:31
1
Antwort

Wird der Rollenanbieter pro Anforderung zwischengespeichert?

Meine MVC-Anwendung nutzt die Rolle eines Benutzers an mehreren Stellen während einzelner Seitenanforderungen. Meine Frage ist, ob der Standard-SqlRoleProvider die aktuellen Benutzerrollen für die Lebensdauer einer Seitenanforderung zwischenspei...
12.12.2012, 14:48