Domanda

Voglio limitare l'accesso a un particolare URL meno che l'utente è un membro del 2 ruoli diversi. In questo caso ho solo voglia di concedere l'accesso a questo URL se l'utente è in entrambi i reporting e Archiviazione ruolo. C'è un modo per fare questo in ASP.net?

<location path="testpage.aspx">
<system.web>
  <authorization>
    <allow roles="Reporting, Archiving"/>
    <deny users="*"/>
  </authorization>
</system.web>

Voglio qualcosa di simile:

<location path="testpage.aspx">
<system.web>
  <authorization>
    <allow roles="Reporting & Archiving"/>
    <deny users="*"/>
  </authorization>
</system.web>

È stato utile?

Soluzione

È un po 'brutto, ma si può ereditare dal provider di ruoli che si sta utilizzando (SqlRoleProvider, WindowsTokenRoleProvider, AuthorizationStoreRoleProvider), ignorare GetRolesForUser, chiamare l'implementazione di base per ottenere i ruoli, e di combinarle, se necessario lì. Poi, ovviamente, mettere il vostro provider di ruoli personalizzato nel web.config nella sezione di configurazione.

Si sarebbe solo bisogno di sovrascrivere il un metodo (e forse getUsersInRole) e combinarli secondo necessità.

public override string[] GetRolesForUser( string username ) {
    List<string> roles = new List<string>( base.GetRolesForUser(username) );
    if( roles.Contains("Reporting") && roles.Contains("Archiving") ) {
        roles.Add("ReportingAndArchiving");
    }
    return roles.ToArray();
}

Altri suggerimenti

Si potrebbe creare una funzione SQL, che, dato un particolare ID utente, l'URL della pagina, e la lista dei ruoli consentiti (XML), restituisce un po 'che indica se l'accesso è concesso a tale URL, e successivamente utilizzare che per impostare un flag che avrebbe determinato se mostrare che come una scelta valida in un menu javascript o DHTML o quant'altro.

Puoi implementare personalizzato provider di ruoli . Poi si può definire la nuova "falso" ruolo ReportingAndArchiving e verificare se l'utente appartiene al reporting e al ruolo archiviazione all'interno del metodo IsUserInRole quando ReportingAndArchiving ruolo è richiesto.

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