15

एक MVC3 आवेदन का निर्माण, और TPTB हमें अपने कस्टम प्राधिकरण प्रदाता का उपयोग करना चाहते हैं। हालांकि, विकास के दौरान यह प्रमाणन प्रदाता के बाद से यह या तो एक त्रुटि दे देंगे टिल आप शट डाउन/ब्राउज़र को पुनः आरंभ, या यह फिर से लॉग इन करें ओ हर संकलन पर करने की आवश्यकता होगी एक दर्द की तरह है।बाईपास या विकास के दौरान [अधिकृत (भूमिकाओं = "")] बंद कर देते हैं?

अभी के लिए, मैंने अभी भी <authentication mode="None"/> को web.config में जोड़ा है, जो तब तक ठीक काम करता है जब तक कि मुझे [Authorize(Roles = "Admin")] फ़िल्टर का उपयोग करने वाली कोई क्रिया या नियंत्रक न हो (यह केवल कोई व्यवस्थापक नहीं हो सकता है)। जब यह उनमें से किसी एक को हिट करता है, तो यह सिर्फ एक खाली पृष्ठ प्रस्तुत करता है।

वहाँ एक रास्ता इन फिल्टर बंद कर देते हैं और विश्व स्तर पर अस्थायी रूप से है? या जब मैं विकास में हूं तो उपयोगकर्ता को सभी भूमिकाएं दें?

संपादित

मुझे clarify- मैं वास्तव में MVC3 को MVC2 से एक बड़ी एप्लिकेशन पर पोर्टिंग रहा हूँ करते हैं। यह [Authorize(Roles="Admin")] और [Authorize(Roles="Admin,Editor")] यह भर के बहुत सारे है। यदि संभव हो तो मैं उन सभी को नहीं बदलूंगा।

मैं सिर्फ एक छोटे से कस्टम भूमिका प्रदाता है कि सभी भूमिकाओं स्वचालित रूप से देता है बनाना चाहिए?

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext.Request.Url.IsLoopback) 
     { 
      // It was a local request => authorize the guy 
      return true; 
     } 

     return base.AuthorizeCore(httpContext); 
    } 
} 
+1

Anri का जवाब, बेहतर है सर्वर पर व्यवस्थापक अधिकार प्राप्त करने के लिए शोषण करते हैं। – AgentFire

उत्तर

22

आप एक कस्टम फिल्टर जो किसी भी जांच करता है कि अनुरोध localhost से आ रही है प्रदर्शन नहीं करेगा अधिकृत करें लिख सकते हैं।

public class MyAuthorizeAttribute: AuthorizeAttribute 
{ 
#if DEBUG 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return true; 
    } 
#endif 
} 

या #define YOUR_OWN_FLAG किसी भी निर्माण, डिबग या रिलीज़ में चालू और बंद व्यवहार चालू करने के लिए।

+0

धन्यवाद, यही वह है जो मैंने कर दिया। मुझे जल्दी से एहसास हुआ कि प्राधिकरण विशेषता की एक खोज/प्रतिस्थापन किसी अन्य चीज़ की तुलना में बहुत आसान था! –

+2

बजाय अनुरोध की जांच के बारे में क्या है। ILLocal? मुझे लगता है कि यह अधिक "बुलेटप्रूफ" है। – mare

+0

यदि आपको ब्लॉक में वापसी के आसपास #if DEBUG जोड़ना चाहिए - अन्यथा आप उत्पादन में संभावित डेटा हानि समस्या खोल रहे हैं। उत्पादन में आईई में जा रहे एक घृणित व्यवस्थापक को रोकने और क्या टाइप करना है http://127.0.0.1/refundCC?CC=1234689&amount=infinity – stevieg

12

आप #if DEBUG निर्देश के साथ AuthorizeAttribute और अलग प्रतीति से विरासत कर सकते हैं:

5

वेब एपीआई के लिए: क्योंकि यह http प्रॉक्सी का उपयोग करने की अनुमति नहीं है

public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute 
{ 
    protected override bool IsAuthorized(HttpActionContext actionContext) 
    { 
     return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext); 
    } 
} 
+0

लूपबैक के लिए परीक्षण अद्भुत हैहा क्यों मैंने ऐसा नहीं सोचा –

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