2012-07-18 9 views
18

मैं फॉर्म एथ के साथ एक एमवीसी एप्लीकेशन बना रहा हूं। मैं सक्रिय निर्देशिका के खिलाफ प्रमाणीकरण कर रहा हूं और इसलिए एक कस्टम रोलप्रोवाइडर बनाया है। मेरा आवेदन केवल भूमिकाओं जो अब तक मैं अपने web.config की appSettings अनुभाग में परिभाषित करने की है के एक छोटे समूह के साथ संबंध है:एएसपीनेट एमवीसी अनुप्रयोग के वेब.कॉन्फिग में भूमिकाएं निर्दिष्ट करना

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

हालांकि मैं इस दृष्टिकोण के साथ समस्याओं के एक जोड़े में चलाने की है:

  1. मैं अपने contoller डेटा एनोटेशन में इन सेटिंग को संदर्भित नहीं कर सकते हैं: [Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])] के रूप में यह अभ्यस्त संकलन तो मैं फिर से समूह का नाम निर्दिष्ट करने के लिए है: [Authorize(Roles = "Domain\\Directors")]
  2. मेरे web.config में, मैं अपने रोल प्रदाता के लिए समूहों को निर्दिष्ट करना चाहता हूं और भूमिकाओं के एक ही सेट की दो अलग-अलग सूचियों को बनाए रखने के बजाय, केवल पूर्व-मौजूदा सूची का संदर्भ देना चाहता हूं।

ऐसा लगता है कि web.config में भूमिकाओं को परिभाषित करने के लिए एक बेहतर/पुन: प्रयोज्य तरीका होना चाहिए, क्या कोई मुझे सही दिशा में इंगित कर सकता है?

उत्तर

26

मैं एक कस्टम को अधिकृत विशेषता का उपयोग पसंद करेंगे। इस तरह।

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

अपने नियंत्रक में, का उपयोग करें:

[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> 

में मुझे आशा है कि यह आपकी पहली समस्या ठीक समाधान होगा। और थोड़ा सा twiking दूसरे को भी हल करेगा।

+0

क्या वेब.कॉन्फिग में सेक्शन की बजाय भूमिकाओं की सूची रखने के लिए कोई विशिष्ट स्थान है? – James

+0

@james: मुझे यकीन नहीं है कि कोई विशिष्ट जगह है या नहीं। लेकिन आप निश्चित रूप से अपनी भूमिकाओं के लिए एक कमरा बना सकते हैं। [यहां] देखें [http://stackoverflow.com/a/338310/887149) – Mohayemin

+0

@james: मैंने जवाब – Mohayemin

संबंधित मुद्दे