दिलचस्प पोस्ट
यह संसाधन आईडी # 2 वापस क्यों करता है? एक पेड़ में नेस्टेड उपज का प्रदर्शन Google सेवा खाते से Google कैलेंडर ईवेंट संपादित करें: 403 MySQL धुरी सारणी Matplotlib में रंग पट्टी रेंज सेट करें क्या jQuery UI Datepicker शनिवार और रविवार (और छुट्टियों) को अक्षम करने के लिए बनाया जा सकता है? दो तिथियों के बीच एंड्रॉइड अंतर क्या एचटीएमएल 5 कस्टम डेटा आईटी 6 में "काम" करता है? जावा 8 के रूप में डिफ़ॉल्ट विधियों: सुरक्षित? कैसे 'टचस्टार्ट' और 'क्लिक करें' घटनाओं को बाध्य करें, लेकिन दोनों का जवाब नहीं है? JQuery पोस्ट के माध्यम से एक जावास्क्रिप्ट ऐरे कैसे पास करें ताकि सभी चीजें PHP $ _POST सरणी के माध्यम से पहुंच सकें? क्या आप किसी शाखा में या ट्रंक में विकास जारी रखते हैं? जार आर्टिफैक्ट का मेवेन अंतिम नाम नियंत्रित करना XML फ़ाइल में पार्स किए गए और बदलना DOM दस्तावेज़ को कैसे सहेजें? एक अभिव्यक्ति के पहले टिलल्ड क्या करता है?

एएसपी.नेट एमवीसी में ऑथराइज एट्रिब्यूट ओवरराइड करें

मेरे पास एक MVC नियंत्रक आधार वर्ग है जिस पर मैंने प्राधिकृत विशेषता को लागू किया है क्योंकि मैं लगभग सभी नियंत्रकों (और उनके कार्यों के साथ) अधिकृत होने के लिए चाहते हैं

हालांकि मुझे एक नियंत्रक और अनधिकृत अन्य नियंत्रक की एक कार्रवाई की आवश्यकता है। मैं उन्हें [Authorize(false)] या कुछ चीज़ों के साथ सजाने में सक्षम होना चाहता था लेकिन यह उपलब्ध नहीं है।

कोई विचार?

Solutions Collecting From Web of "एएसपी.नेट एमवीसी में ऑथराइज एट्रिब्यूट ओवरराइड करें"

संपादित करें: चूंकि ASP.NET MVC 4 का सबसे अच्छा तरीका अंतर्निहित AllowAnonymous विशेषता का उपयोग करना है

नीचे दिए गए उत्तर में एएसपी.नेट एमवीसी के पिछले संस्करणों का उल्लेख है

आप प्राधिकरण की आवश्यकता है या नहीं, यह निर्दिष्ट करने के लिए कि वैकल्पिक प्राधिकरण विशेषता से प्राप्त एक कस्टम प्राधिकरण विशेषता को एक वैकल्पिक bool पैरामीटर के साथ बना सकता है।

 public class OptionalAuthorizeAttribute : AuthorizeAttribute { private readonly bool _authorize; public OptionalAuthorizeAttribute() { _authorize = true; } public OptionalAuthorizeAttribute(bool authorize) { _authorize = authorize; } protected override bool AuthorizeCore(HttpContextBase httpContext) { if(!_authorize) return true; return base.AuthorizeCore(httpContext); } } 

उसके बाद आप अपने बेस नियंत्रक को उस विशेषता के साथ सजाने कर सकते हैं:

 [OptionalAuthorize] public class ControllerBase : Controller { } 

और किसी नियंत्रक के लिए आप प्राधिकरण नहीं चाहते हैं कि ओवरराइड का उपयोग केवल 'झूठी' – उदाहरण के साथ करें

 [OptionalAuthorize(false)] public class TestController : ControllerBase { public ActionResult Index() { return View(); } } 

ऐसा लगता है कि एएसपी.नेट एमवीसी 4 'फिक्स्ड' यह एक अनुमतिअनैनाम विशेषता जोड़कर है।

डेविड हेडन ने इसके बारे में लिखा :

 [Authorize] public class AccountController : Controller { [AllowAnonymous] public ActionResult Login() { // ... } // ... } 

इस पर मेरा व्यक्तिगत नियंत्रण नियंत्रक को विभाजित करना होगा बस एक और नियंत्रक बनाएँ कार्यों के लिए आपको प्रमाणीकरण की आवश्यकता नहीं है।

या आपके पास हो सकता है:

  • BaseController
    प्रमाणीकरण की आवश्यकता नहीं है – यहां आपके पास आपके सभी "आधार सामग्री" हैं :)।

  • BaseAuthController : BaseController
    सभी क्रियाओं को यहां प्रमाणीकरण की आवश्यकता है

इस तरह से जब आप चाहें तो प्रमाणीकरण प्राप्त कर सकते हैं, केवल एक विशिष्ट वर्ग से लेकर।

यदि आप एक अन्य अधिकृत प्राधिकृत नियंत्रक पर अनधिकृत होना चाहते हैं तो आप ऐसा कुछ कर सकते हैं:

 public class RequiresAuthorizationAttribute : ActionFilterAttribute { private readonly bool _authorize; public RequiresAuthorizationAttribute() { _authorize = true; } public RequiresAuthorizationAttribute(bool authorize) { _authorize = authorize; } public override void OnActionExecuting(ActionExecutingContext filterContext) { var overridingAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof (RequiresAuthorizationAttribute), false); if (overridingAttributes.Length > 0 && overridingAttributes[0] as RequiresAuthorizationAttribute != null && !((RequiresAuthorizationAttribute)overridingAttributes[0])._authorize) return; if (_authorize) { //redirect if not authenticated if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { //use the current url for the redirect var redirectOnSuccess = filterContext.HttpContext.Request.Url.AbsolutePath; //send them off to the login page //var redirectUrl = string.Format("?RedirectUrl={0}", redirectOnSuccess); var loginUrl = LinkBuilder.BuildUrlFromExpression<HomeController>(filterContext.RequestContext, RouteTable.Routes, x => x.Login(redirectOnSuccess)); filterContext.HttpContext.Response.Redirect(loginUrl, true); } } } }