Domanda

Ho un'applicazione che deve colpire ActiveDirectory per ottenere i permessi / ruoli dell'utente all'avvio dell'app e persistere per tutto.

Non voglio toccare AD su ogni modulo per ricontrollare le autorizzazioni dell'utente, quindi mi piacerebbe che il ruolo dell'utente e, eventualmente, altri dati sull'utente connesso fossero disponibili a livello globale su qualsiasi modulo all'interno dell'applicazione, quindi Posso nascondere correttamente funzionalità, pulsanti, ecc. Dove necessario.

Qualcosa del tipo:

if (UserProperties.Role == Roles.Admin)
{
    btnDelete.Visible = false;
}

Quali sono le migliori pratiche per l'archiviazione di dati utente statici in un'app di Windows? Soluzioni come Singleton o variabili globali potrebbero funzionare, ma stavo cercando di evitarle.

Un oggetto utente che viene passato al controllore di ogni modulo è altrettanto cattivo?

È stato utile?

Soluzione

Impostare Thread.CurrentPrincipal con o WindowsPrincipal , un GenericPrincipal o il tuo principal personalizzato. Quindi, puoi semplicemente chiamare IsInRole :

if (Thread.CurrentPrincipal.IsInRole(Roles.Admin)) {
   btnDelete.Visible = false;
}

Altri suggerimenti

Forse il mio giudizio è offuscato dal mio uso frequente di javascript, ma penso che se hai qualcosa che intendeva essere globale, allora usare le variabili globali va bene.

Il globale è negativo quando si espongono a livello globale cose che non dovrebbero esserlo. Globale va bene se è semanticamente corretto per l'uso previsto dei dati.

Puoi utilizzare il provider di profili da asp.net nella tua app di Windows. Dai un'occhiata @ http://fredrik.nsquared2.com/viewpost.aspx? PostID = 244 & amp; showfeedback = true

Spero che aiuti, Bruno Figueiredo http://www.brunofigueiredo.com

I dati statici (o un singleton) sembrano andare bene per questo se si desidera estendere i dati all'istanza dell'applicazione (o AppDomain).

Tuttavia, dato che stai parlando in effetti della memorizzazione nella cache delle credenziali di sicurezza di un utente, potresti voler riflettere attentamente sulle falle di sicurezza. Ad esempio, cosa succede se l'utente lascia l'applicazione in esecuzione per giorni? Potrebbero eseguire operazioni con le loro credenziali antiche piuttosto che con le credenziali più attuali. A seconda di ciò che stai proteggendo, potresti essere meglio controllare le credenziali su richiesta o almeno scadere periodicamente le credenziali memorizzate nella cache.

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