2012-07-18 26 views
18

Formlar auth içeren bir MVC uygulaması oluşturuyorum. Etkin dizine karşı kimlik doğrulaması yapıyorum ve özel bir RoleProvider oluşturdum. Başvurum şimdiye kadar benim web.config appsettings bölümünde tanımlayan edilmiş rollerin küçük bir set ile sadece ilgilidir: Bu yaklaşım ile sorunları birkaç haline çalıştırmak AncakBir asp.net MVC uygulamasının web.config dosyasındaki Rolleri Belirtme

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

:

  1. benim kontrolörü veri ek açıklamaları bu ayarı başvuramaz: [Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])] alışkanlık derlemek şekilde tekrar grubun adını belirtmek zorunda: [Authorize(Roles = "Domain\\Directors")].
  2. Web.config'de, aynı rol kümesinin iki ayrı listesini tutmak yerine, rol sağlayıcım için groupsToUse öğesini ve yalnızca önceden var olan bir listeye başvuruda bulunmak istiyorum.

Web.config'deki rolleri tanımlamak için daha iyi/yeniden kullanılabilir bir yol olmalı, birisi bana doğru yönde işaret edebilir mi?

cevap

26

Ben özel bir özellik yetki kullanmayı tercih ediyorum. Bunun gibi. Kumandanızda olarak

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); 
    } 
} 

kullanın:

[MyAuthorize("DirectorRole")] 

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> 

ben bu sizin ilk sorun gayet çözecektir umuyoruz. Ve birazcık twiking ikincisini de çözecek.

+0

Web.config dosyasında, yalnızca bölümünde rollerin bir listesini yerleştirmek için belirli bir yer var mı? – James

+0

Oyuncular: Belirli bir yer olup olmadığından emin değilim. Ama kesinlikle rollerin için yer açabilirsin. Buraya bir bakın (http://stackoverflow.com/a/338310/887149) – Mohayemin

+0

@james: Cevabı güncelledik – Mohayemin

İlgili konular