Domanda

Ho il seguente nel mio web.config:

<location path="RestrictedPage.aspx">
    <system.web>
        <authorization>
            <allow roles="Group1Admin, Group3Admin, Group7Admin"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

In RestrictedPage.aspx.cs, come posso recuperare la raccolta di ruoli consentiti che contiene Group1Admin, Group3Admin e Group7Admin?

Ecco perché chiedo:

web.config sta gestendo l'autorizzazione per la pagina. Funziona benissimo. Ma avrò un paio di queste pagine (ad esempio RestrictedPage.aspx, RestrictedPage2.aspx, RestrictedPage3.aspx). Ognuna di queste pagine avrà il mio controllo web personalizzato su di esso. E ognuna di queste pagine avrà ruoli consentiti diversi. Il mio webcontrol ha un elenco a discesa. Le scelte all'interno del menu a discesa dipendono dall'intersezione dei ruoli dell'utente e dai ruoli consentiti della pagina.

Come menzionato di seguito, la ricerca nel web.config con XPath probabilmente funzionerebbe. Speravo solo qualcosa di più quadro. Un po 'come SiteMap. Quando inserisco i ruoli nella mia web.sitemap, posso acquisirli usando SiteMap.CurrentNode.Roles (il mio sito web utilizza l'autenticazione di Windows, quindi non posso usare web.sitemap per il taglio di sicurezza e preferirei mantenere i ruoli in uno solo file).

È stato utile?

Soluzione

// set the configuration path to your config file
string configPath = "??";

Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);

// Get the object related to the <identity> section.
AuthorizationSection section = (AuthorizationSection)config.GetSection("system.web/authorization");

dall'oggetto sezione ottenere l'oggetto AuthorizationRuleCollection dove è quindi possibile estrarre i ruoli.

Nota: probabilmente dovrai modificare un po 'il percorso della sezione poiché inizi con " location path = " RestrictedPage.aspx " " ;, non ho provato quello scenario.

Altri suggerimenti

if {User.IsInRole("Group1Admin"){//do stuff}

È quello che stai chiedendo?

Non ne sono sicuro, ma avrei pensato che questo fosse verificato prima che la tua pagina fosse persino elaborata, quindi se un utente non avesse un ruolo non avrebbe mai raggiunto la tua pagina. Che alla fine renderebbe ridondante la visibilità di questo nella pagina.

Sono convinto che esiste un modo migliore per leggere queste informazioni, ma qui è un modo per leggere i valori consentiti da un file web.config.

XmlDocument webConfigReader = new XmlDocument(); 
webConfigReader.Load(Server.MapPath("web.config")); 

XmlNodeList root = webConfigReader.SelectNodes("//location[@path="RestrictedPage.aspx"]//allow//@roles"); 

foreach (XmlNode node in root) 
{ 
     Response.Write(node.Value); 
} 

Naturalmente, il provider di ruoli ASP.NET lo gestirà per te, quindi la lettura di questi valori è davvero rilevante solo se hai intenzione di fare qualcosa con loro nel code-behind accanto all'autorizzazione degli utenti, cosa che potresti fare.

Spero che questo ti aiuti - potresti dover dividere il risultato usando il carattere,.

Ciò che accade in genere è questo ...

Quando l'utente accede alla tua pagina, se l'autenticazione / autorizzazione è attiva, viene generato l'evento Application_Authentication. A meno che non si utilizzi l'autenticazione di Windows su qualcosa come Active Directory, gli oggetti IPrincipal e Identity non saranno disponibili, quindi non è possibile accedere al metodo User.IsInRole (). Tuttavia, puoi farlo aggiungendo il seguente codice nel tuo file Global.asax:

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)

      Dim formsAuthTicket As FormsAuthenticationTicket
      Dim httpCook As HttpCookie
      Dim objGenericIdentity As GenericIdentity
      Dim objMyAppPrincipal As CustomPrincipal
      Dim strRoles As String()

      Log.Info("Starting Application AuthenticateRequest Method...")

      httpCook = Context.Request.Cookies.Get("authCookieEAF")
      formsAuthTicket = FormsAuthentication.Decrypt(httpCook.Value)
      objGenericIdentity = New GenericIdentity(formsAuthTicket.Name)
      strRoles = formsAuthTicket.UserData.Split("|"c)
      objMyAppPrincipal = New CustomPrincipal(objGenericIdentity, strRoles)
      HttpContext.Current.User = objMyAppPrincipal

      Log.Info("Application AuthenticateRequest Method Complete.")

End Sub

Ciò inserirà un cookie nella sessione del browser con le credenziali utente e ruolo appropriate a cui è possibile accedere nell'app Web.

Idealmente, il tuo utente avrà solo un ruolo in un'applicazione, quindi credo sia per questo che hai a disposizione il metodo di controllo del ruolo. Sarebbe abbastanza facile scrivere un metodo di supporto per te che verifichi l'elenco dei ruoli nell'applicazione e provi per vedere in quale ruolo ricoprono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top