2012-07-18 10 views
18

Sto creando un'applicazione MVC con l'autenticazione moduli. Sto effettuando l'autenticazione rispetto alla directory attiva e così ho creato un RoleProvider personalizzato. La mia domanda è interessato solo con un piccolo insieme di ruoli che fino ad ora sono stato determinante nella sezione appSettings del mio web.config:Specifica ruoli in web.config di un'applicazione MVC asp.net

<appSettings> 
    <add key="DirectorRole" value="Domain\Directors" /> 
    <add key="ManagementRole" value="Domain\Managers" /> 
    ... 
</appSettings> 

Tuttavia ho incontrato un paio di problemi con questo approccio:

  1. non posso riferire queste impostazioni nelle mie annotazioni di dati contoller: [Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])] come è solito compilare quindi devo specificare il nome del gruppo di nuovo: [Authorize(Roles = "Domain\\Directors")].
  2. Nel mio web.config, vorrei specificare groupsToUse per il mio fornitore di ruolo e fare semplicemente riferimento a un elenco preesistente, piuttosto che mantenere due elenchi separati dello stesso insieme di ruoli.

Sembra che ci debba essere un modo migliore/riusabile per definire i ruoli nel web.config, qualcuno può indicarmi la direzione giusta per favore?

risposta

26

io preferirei utilizzando una consuetudine autorizzare attributo. Come questo.

public class MyAuthorizeAttribute : AuthorizeAttribute { 

    public MyAuthorizeAttribute(params string[] roleKeys) { 
     List<string> roles = new List<string>(roleKeys.Length); 

     //foreach(var roleKey in roleKeys) { 
      //roles.Add(ConfigurationManager.AppSettings["DirectorRole"]); 
     //} 
     var allRoles = (NameValueCollection)ConfigurationManager.GetSection("roles"); 
     foreach(var roleKey in roleKeys) { 
      roles.Add(allRoles[roleKey]); 
     } 

     this.Roles = string.Join(",", roles); 
    } 
} 

nel controller, usare:

[MyAuthorize("DirectorRole")] 

Nel web.config

<configSections> 
    <section 
     name="roles" 
     type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 

    <roles> 
    <add key="DirectorRole" value="Domain\Directors" /> 
    <add key="ManagementRole" value="Domain\Managers" /> 
    </roles> 

Spero che questo risolverà il vostro primo problema bene. E twiking un po 'risolverà anche il secondo.

+0

C'è una posizione specifica in web.config per posizionare un elenco di ruoli anziché solo nella sezione ? – James

+0

@james: non sono sicuro che ci sia un posto specifico. Ma puoi sicuramente creare una stanza per i tuoi ruoli. Dai un'occhiata a [qui] (http://stackoverflow.com/a/338310/887149) – Mohayemin

+0

@james: Ho aggiornato la risposta – Mohayemin