2010-09-22 10 views
5

ASP.Net में नियंत्रकों के भूमिकाओं मानचित्रण मैं वर्तमान में मुश्किल इसलिए की तरह मेरे MVC अनुप्रयोगों में फिल्टर में अधिकृत भूमिकाओं कोडिंग हूँ:गतिशील MVC

[Authorize(Roles = "Administrator,Manager")] 

मैं अंत में एक तरह से मैप करने के लिए करना चाहते हैं प्रत्येक नियंत्रक के लिए भूमिकाएं, ताकि साइट व्यवस्थापक असाइन कर सकें कि कौन सी भूमिकाएं प्रत्येक क्रिया के सेट को निष्पादित कर सकती हैं।

string roles = DoSomethingToGetAllowableRoles(controllerName); 

[Authorize(Roles = roles)] 

मैं कल्पना कर रहा हूँ कि मैं एक डेटाबेस तालिका है कि किसी तरह प्रत्येक नियंत्रक की एक सूची रखता है की आवश्यकता है, और फिर एक और तालिका भूमिकाओं के लिए नियंत्रकों मानचित्रण। जो मैं चाहता हूं वह एक ऐसा पृष्ठ है जहां मैं प्रत्येक नियंत्रक को सूचीबद्ध कर सकता हूं और उसके बाद चेक बॉक्स का एक सेट होता है जो उस नियंत्रक पर लागू होने वाली प्रत्येक भूमिका को सूचीबद्ध करता है।

किसी के पास कोई उदाहरण है या मुझे एक दिशा में ले जा सकता है जो इसे पूरा करेगा?

उत्तर

8

आपको अपना खुद का प्राधिकरण फ़िल्टर लिखने की आवश्यकता होगी (शायद एक में निर्मित करके)।

इसका कारण यह है कि आप विशेषता पैरामीटर को गतिशील रूप से असाइन नहीं कर सकते हैं।

आपको एमवीसी स्रोत कोड से गड़बड़ करने की आवश्यकता नहीं होगी - आपको बस एक वर्ग बनाने की आवश्यकता है जो System.Web.Mvc.AuthrorizeAttribute से विरासत में है, AuthorizeCore को ओवरराइड करें, और फिर डिफ़ॉल्ट के स्थान पर अपनी विशेषता का उपयोग करें:

public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Put your custom logic here, returning true for success and false for failure, 
     // or return base.AuthorizeCore(httpContext) to defer to the base implementation 
    } 
} 
+0

मुझे लगता है कि मैं यह जानने का प्रयास कर रहा था कि यह एमवीसी स्रोत कोड के साथ गड़बड़ किए बिना संभव है ... धन्यवाद! – Ben

+0

यह उतना मुश्किल नहीं है जितना आप सोच सकते हैं। मैंने एक उदाहरण दिया है। –