Come implementare la sicurezza basata sui ruoli utilizzando Dynamic Data e Active Directory?
-
03-07-2019 - |
Domanda
Qual è il modo migliore per implementare la sicurezza usando i ruoli di active directory su un sito di dati dinamici asp.net?
Vorrei limitare determinate viste (e i relativi collegamenti) a determinati ruoli. ovvero l'utente A può visualizzare solo le azioni dell'elenco per la tabella x e l'utente B può visualizzare solo le azioni dell'elenco per la tabella y
Soluzione
Ho un numero di articoli su questo sul mio blog qui A Soluzione di autorizzazione basata su attributi DynamicData usando i ruoli utente e qui DynamicData: Autorizzazioni basate su database - Parte 1 e I dovrebbe anche dare un'occhiata a Protezione del campione di dati dinamici su codeplex che utilizza un gestore di route .
Altri suggerimenti
L'ho fatto in molte applicazioni.
Abilita l'autenticazione di Windows per l'applicazione.
Crea alcuni oggetti in grado di archiviare le credenziali dell'utente e di archiviare quell'oggetto nella sessione per un rapido recupero. In caso contrario, è possibile ricostruirlo rapidamente. Di solito ogni ruolo è impostato su un po ', ad esempio:
enum USER_ROLE : int
{
Role1 = 1,
Role2 = 2,
Role3 = 4,
Role4 = 8,
etc
}
if (Context.User.IsInRole("Roll1Name")) YourUserObject.Roles += USER_ROLE.Role1;
if (Context.User.IsInRole("Roll2Name")) YourUserObject.Roles += USER_ROLE.Role2;
etc
Quindi ogni volta che un controllo deve essere protetto, lo passo in una funzione che accetta un HtmlControl e una proprietà in base al ruolo dell'utente e ai requisiti di sicurezza per quel controllo.
Eg. bool SetControlSecurity (HtmlControl ctrl, int iUserRoles, int iControlRoles, ACTION eAction)
Quindi un esempio per fare un pannello potrebbe essere:
SetControlSecurity (pnlUserInfo, YourUserObject.Roles, eRole.Role2, ACTION.Hide);
Di solito ho anche bisogno di un parametro per il tipo di azione da eseguire in caso di errore di sicurezza come nascondere, in sola lettura, cancellare i dati, ecc ...
Confrontare il ruolo nella funzione è semplice:
bool bHasAccess = ((iUserRole & iControlRoles) > 0);
if (bHasAcess)
{
// leave the control or make sure it is visible etc
}
else
{
// take action to secure the control based on the action
}
Spero che sia d'aiuto.
Puoi semplicemente utilizzare il Memebrship di ASP.NET Active Directory & amp; Fornitori di ruoli per autenticare \ autorizzare gli utenti all'applicazione. Quindi puoi chiamare il Roles.IsUserInRole dove mai vuoi controllare per l'appartenenza al ruolo AD verificare che gli utenti facciano parte del gruppo o dei gruppi pertinenti prima di eseguire il rendering dei contenuti.