C # Provider di ruoli per più applicazioni

0

Sto creando un RoleProvider personalizzato che vorrei utilizzare su più applicazioni nello stesso pool di applicazioni. Per l'amministrazione dei ruoli (creare un nuovo ruolo, aggiungere utenti al ruolo, ecc.) Mi piacerebbe creare un'applicazione master a cui potrei accedere e impostare i ruoli per ogni applicazione aggiuntiva. Quindi, ad esempio, potrei avere AppA e AppB nella mia organizzazione e ho bisogno di creare un'applicazione chiamata AppRoleManager che possa impostare i ruoli per AppA e AppB. Ho problemi ad implementare il mio RoleProvider personalizzato perché utilizza un metodo di inizializzazione che ottiene il nome dell'applicazione dal file di configurazione, ma ho bisogno che il nome dell'applicazione sia una variabile (ad esempio "AppA" o "AppB") e passato come parametro. Ho pensato solo all'implementazione dei metodi richiesti, e poi anche a metodi aggiuntivi che passano il nome dell'applicazione come parametro, ma sembra clunky. cioè.

public override CreateRole(string roleName)
{
  //uses the ApplicationName property of this, which is set in web.config
  //creates role in db
}
public CreateRole(string ApplicationName, string roleName)
{
  //creates role in db with specified params.
}

Inoltre, preferirei che alle persone fosse impedito di chiamare CreateRole (stringa roleName) perché l'istanza corrente della classe potrebbe avere un valore applicationName diverso da quello previsto (cosa dovrei fare qui? gettare NotImplementedException?).

Ho provato a scrivere la classe senza ereditare RoleProvider. Ma è richiesto dal framework.

Qualche idea generale su come strutturare questo progetto?

Stavo pensando di creare una classe wrapper che utilizza il provider di ruoli e imposta esplicitamente il nome dell'applicazione prima (e dopo) e chiama al provider qualcosa del tipo:

static class RoleProviderWrapper
{
  public static CreateRole(string pApplicationName, string pRoleName)
  {
    Roles.Provider.ApplicationName = pApplicationName;
    Roles.Provider.CreateRole(pRoleName);
    Roles.Provider.ApplicationName = "Generic";
  }
}

questa è la mia migliore scommessa?

    
posta solidau 18.09.2012 - 01:08
fonte

1 risposta

0

Se hai eseguito l'aspnet_regsql.exe che dovrebbe darti un buon inizio e non avrai bisogno di reinventare la ruota (almeno per iniziare). Implementa il provider di appartenenza predefinito e offre molte funzionalità "off the shelf", che è ciò che stai descrivendo. Login utente, password, autenticazione basata sugli attributi (per MVC), autorizzazione a livello di directory e accesso basato sulla configurazione reindirizzamenti, timeout di sessione ecc.

Lo strumento aspnet_regsql offre uno schema di database vuoto e semplifica il collegamento del comportamento di appartenenza predefinito alla propria app, inclusi; Accesso a cartelle basate su ruoli, più applicazioni con supporto per Single Sign-On e altre tabelle di tipo membership / profilo (in genere non li uso molto)).

Puoi anche gestire gli utenti / ruoli da Visual Studio utilizzando gli strumenti di configurazione del sito Web dal sito Web di gestione basato sul Web. Tutto questo è integrato e disponibile senza ulteriori codifiche / plug-in. Lo consiglio vivamente per i nuovi app dato che ti dà così tanto in così poco tempo e ti permette di concentrarti sulla parte divertente (l'app) ..

Inoltre, puoi ritagliare ciò che viene generato da lì o usarlo come esempio. Solitamente lego il proprio User_ID all'utente del mio schema e metto un evento trigger o "on user created" per sincronizzare i GUID. In questo modo posso ottenere un accesso utente, recuperare la password e ricordarmi di essere attivo e funzionante in circa 10 minuti (gestisce anche situazioni in cui i cookie non sono abilitati) .. e se c'è mai la necessità di implementare un fornitore personalizzato, può tornare indietro, ma almeno la funzionalità di base non impedisce allo sviluppo dell'app di andare avanti.

alcune informazioni su aspnet_regsql.exe dalla MS:

link

Ecco una soluzione molto migliore:

link

    
risposta data 18.09.2012 - 01:18
fonte

Leggi altre domande sui tag