Asp.Net autenticazione Ruolo condizionale URL
-
19-09-2019 - |
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>
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
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.