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?