2011-09-16 13 views
18

मैं प्रपत्र प्रमाणीकरण के साथ एमवीसी 3 का उपयोग कर रहा हूं। मेरी नियंत्रक या तरीकों पर, मैं निम्नलिखित कर रहा हूँ:एएसपी.नेट - रोल पेज प्रमाणीकरण विफल होने पर त्रुटि पृष्ठ पर रीडायरेक्ट

[Authorize (Roles = "developer")] 

इस स्थिति में, मैं तो उपयोगकर्ता के और नहीं करता है, तो लॉग होता है की जाँच करने के लिए, उन्हें प्रवेश पृष्ठ पर लौटने चाहते हैं। हालांकि, अगर उस उपयोगकर्ता के लिए 'IsInRole' चेक गलत है, तो मैं चाहता हूं कि वे एक अलग दृश्य पर जाएं जो कुछ 'अधिकृत नहीं' कहता है।

इस तरह कुछ पूरा करने का सबसे अच्छा तरीका क्या है? मैं एक नई प्राधिकरण विशेषता बनाने से बचने की उम्मीद कर रहा था इसलिए मुझे अपने पूरे आवेदन में हर प्राधिकृत विशेषता को दोबारा नहीं करना पड़ेगा, लेकिन यदि आवश्यक है, तो मैं उस मार्ग पर जाऊंगा।

उत्तर

44

एक कस्टम अधिकृत विशेषता HandleUnauthorizedRequest विधि अधिभावी काम कर सकता है:

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      // The user is not authenticated 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole)) 
     { 
      // The user is not in any of the listed roles => 
      // show the unauthorized view 
      filterContext.Result = new ViewResult 
      { 
       ViewName = "~/Views/Shared/Unauthorized.cshtml" 
      }; 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
} 

और उसके बाद:

[MyAuthorize(Roles = "developer")] 
public ActionResult Develop() 
{ 
    ... 
} 
+0

यह पूरी तरह से काम किया। – Brandon

+0

बिल्कुल सही ... धन्यवाद ... – Shaz

+3

आप इस कस्टम कार्यान्वयन को कहां रखते हैं? –

1

तुम भी 401 स्थिति कोड के लिए कस्टम त्रुटि पेज के साथ ऐसा कर सकते हैं।

कार्यान्वयन विवरण के लिए this question देखें।

0

आप इसे इस तरह उपयोग कर सकते हैं। क्योंकि अगर आपके पास अधिकार नहीं है तो यह विधि आता है। प्राधिकरण नियंत्रण आवश्यक नहीं है

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      // The user is not authenticated 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else 
     { 
      filterContext.Result = new ViewResult 
      { 
       ViewName = "~/Views/Shared/Unauthorized.cshtml", 
      }; 
     } 
    } 
संबंधित मुद्दे

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