Ho un'applicazione che fa molto affidamento sull'autorizzazione degli utenti. All'interno di esso, sto usando IPrincipal.IsInRole()
per verificare se gli utenti sono nei gruppi corretti:IPrincipal.IsInRole() funziona solo quando ho troncato i nomi dei ruoli - perché?
IPrincipal principal = Thread.CurrentPrincipal;
bool inRole = principal.IsInRole("mydomainname\some role with a long name");
Questo funziona bene per la maggior parte, ma non riesce (restituisce un risultato errato) se il principale è un esempio di un WindowsPrincipal
. Ho scoperto che per farlo funzionare correttamente, devo troncare il nome del ruolo che mi passa per essere lungo 32 caratteri (compreso il nome di dominio e la \
):
IPrincipal principal = Thread.CurrentPrincipal; // <- returns a WindowsPrincipal
bool inRole = principal.IsInRole("mydomainname\some role with a lo");
troncamento il nome del ruolo poi funziona correttamente Perché? Si tratta di un bug/funzionalità/problema documentato? Ho il sospetto che potrebbe essere correlato ai domini Win2000, ma non riesce a trovare alcuna informazione su di esso.
qualche informazione in più:
Questo è un problema perché l'applicazione può essere configurato per utilizzare Active Directory o "su misura" per la sua autorizzazione ("custom" essere qualsiasi provider di autorizzazione che supporta un'interfaccia - potrebbe essere SQL -basato, basato su file, ecc.). Quando è configurata la personalizzazione, i ruoli probabilmente non hanno bisogno di troncamenti e quindi non voglio dover gestire questo caso speciale nel mio codice. Inoltre, ho un'altra parte dell'applicazione che utilizza le classi nello spazio dei nomi System.DirectoryServices.AccountManagement
per cercare l'appartenenza ai gruppi. Ciò richiede il nome completo del ruolo e non funziona se sono troncati.
Qualcuno una volta ha pensato: "32 caratteri sono sufficienti per qualsiasi ruolo" –
@Henk: Mi piace :) I caratteri 32 lo rendono piuttosto difficile da cercare dato che ottieni molti hit per 'Int32',' Win32' , eccetera... – adrianbanks