Ich habe eine Anwendung, die stark auf die Autorisierung von Benutzern beruht. Innerhalb es, ich bin mit IPrincipal.IsInRole()
zu überprüfen, ob Benutzer in den richtigen Gruppen sind:IPrincipal.IsInRole() funktioniert nur, wenn ich die Rollennamen abschneide - warum?
IPrincipal principal = Thread.CurrentPrincipal;
bool inRole = principal.IsInRole("mydomainname\some role with a long name");
Dies funktioniert gut für den größten Teil, aber nicht (gibt ein falsches Ergebnis), wenn der Auftraggeber eine Instanz eines WindowsPrincipal
ist. Ich habe festgestellt, dass es richtig funktioniert, ich habe den Namen der Rolle abzuschneiden, die ich in Pass 32 Zeichen lang zu sein (einschließlich des Domänennamens und der \
):
IPrincipal principal = Thread.CurrentPrincipal; // <- returns a WindowsPrincipal
bool inRole = principal.IsInRole("mydomainname\some role with a lo");
Kürzen den Rollennamen dann funktioniert richtig. Warum? Ist das ein Bug/Feature/dokumentiertes Problem? Ich habe eine Ahnung, dass es mit Win2000-Domains verwandt sein kann, kann aber keine Informationen darüber finden.
einige zusätzliche Informationen:
Dies ist ein Problem, weil die Anwendung konfiguriert werden kann, entweder Active Directory oder „custom“ für die Zulassung („custom“ ist jeder Autorisierungsanbieter zu verwenden, die eine Schnittstelle unterstützt - SQL sein könnte basierend, dateibasiert, etc ..). Wenn custom konfiguriert ist, müssen die Rollen höchstwahrscheinlich nicht abgeschnitten werden. Daher möchte ich diesen speziellen Fall in meinem Code nicht behandeln. Darüber hinaus habe ich einen anderen Teil der Anwendung, die Klassen im System.DirectoryServices.AccountManagement
Namespace verwendet, um Gruppenmitgliedschaften nachzuschlagen. Dies erfordert den vollständigen Rollennamen und funktioniert nicht, wenn sie abgeschnitten werden.
Jemand dachte einmal: "32 Zeichen sind genug für jede Rolle" –
@Henk: Ich mag es :) Die Charaktere sind 32 macht es ziemlich schwer zu suchen, wie Sie viele Treffer für 'Int32',' Win32' bekommen , etc... – adrianbanks