2011-04-14 8 views
14

हाय मैं एक कस्टम प्राधिकरण फिल्टरASP.NET IAuthorizationFilter OnAuthorization

//The Authourization attribute on a controller 
public class CustomAdminAuthorizationFilter : IAuthorizationFilter 
{ 
    private readonly IAuthentication _authentication; 

    public SageAdminAuthorizationFilter(IAuthentication authentication) 
    { 
     _authentication = authentication; 
    } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     bool result = _authentication.Authorize(filterContext.HttpContext); 
    } 
} 

लागू करने के लिए आप OnAuthorization मैं वापस एक परिणाम है कि झूठी का सच है पाने पर देख सकते हैं कोशिश कर रहा हूँ। मुझे वापस आने के लिए सेट करने की क्या ज़रूरत है जहां से मैं आया था?

संपादित करें:

यह अभी भी मैं इंजेक्षन IAuthetication

this.BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0); 
    Bind<IAuthentication>().To<CustomAuthenticationService>(); 

तब मैं इतनी के रूप में नियंत्रक में मेरी कार्रवाई को सजाने कर पेज

में लॉग करने के लिए मुझे सीधे फेंक रहा है।

[Authorize] 
    public ActionResult Index() 
    { 
     ViewBag.Title = "Welcome"; 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

मेरी web.config इम

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
</authentication> 

का उपयोग कर में यह बदला जा सकता है?

किसी भी मदद की सराहना की जाएगी।

+0

आपके प्रश्न का उत्तर का उपयोग करें? – hunter

उत्तर

16

बदलें कि एक Attribute करने के लिए, नहीं सरल एक IAuthorizationFilter

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class SageAdminAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter 
{ 
    readonly IAuthentication _authentication; 

    public SageAdminAuthorizeAttribute(IAuthentication authentication) 
    { 
     _authentication = authentication; 
    } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!_authentication.Authorize(filterContext.HttpContext)) 
      filterContext.Result = new HttpUnauthorizedResult(); 
    } 
} 

और अब बल्कि का उपयोग करने से [Authorize] अपने नए [SageAdminAuthorize] विशेषता

[SageAdminAuthorize] 
public ActionResult Index() 
{ 
    ViewBag.Title = "Welcome"; 
    ViewBag.Message = "Welcome to ASP.NET MVC!"; 

    return View(); 
} 
+0

धन्यवाद कि मेरे प्रश्न का उत्तर दें हालांकि मैंने अधिक जानकारी जोड़ दी है क्योंकि मैं हमेशा स्क्रीन पर लॉग इन करने जा रहा हूं –

+0

मैंने 'अनुमति' नामक एक नई विशेषता बनाने के लिए उपरोक्त उदाहरण का उपयोग किया। मैं भूमिकाओं के बजाय अनुमति आधारित प्राधिकरण का उपयोग करना चाहता था। क्या यह सही तरीका है? या क्या मुझे उपयोगकर्ता अनुमतियों की जांच करने के लिए किसी अन्य तरीके का उपयोग करना चाहिए? – Skadoosh

+0

निश्चित रूप से जाने का एक अच्छा तरीका है। आप यह निर्धारित कर सकते हैं कि आपके द्वारा चुनी गई 'ऑन-प्राधिकरण' विधि में प्राधिकरण को कैसे प्रबंधित किया जाता है। – hunter