16

मेरे पास ASP.Net MVC3 का उपयोग करके एक प्रोजेक्ट है और भूमिकाओं के लिए सदस्यता का उपयोग करना है। मैं हर नियंत्रक में अधिकृत का उपयोग करता हूं। जैसे:एएसपी.NET एमवीसी 3 रीडायरेक्ट अनधिकृत उपयोगकर्ता लॉगिन करने के लिए नहीं यूआरएल

[Authorize(Roles = "Administrator")] 
    public ActionResult Index(string q, int i) 
    { 
     return View(model); 
    } 

अगर कोई नहीं करता है व्यवस्थापक के लिए भूमिका है, तो यह डिफ़ॉल्ट रूप से पेज के लिए लॉग इन पर रीडायरेक्ट करेगा। इसे कैसे बदलें, तो यह दृश्य/साझा/अनधिकृत.cshtml में रीडायरेक्ट करेगा? या शायद अगर किसी के पास व्यवस्थापक के लिए भूमिका नहीं है, तो यह संदेश बॉक्स (अलर्ट) दिखाएगा?

अग्रिम धन्यवाद।

उत्तर

11

बस (जाँच उस मार्ग से मौजूद है)

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

पेज web.config में दिखाए जाने के लिए है कि बदलते हैं तो आप, बजाय, एक रीडायरेक्ट करना चाहते हैं प्रत्येक भूमिका के लिए विशिष्ट पथ आप अपने आप के साथ AuthorizeAttribute का विस्तार कर सकते हैं। इस तरह कुछ (परीक्षण नहीं किया गया है, मैं आपको एक विचार देने के लिए लिखता हूं)

public class CheckAuthorize : ActionFilterAttribute 
{ 
    public Roles[] Roles { get; set; } 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    //Your code to get the user 
    var user = ((ControllerBase)filterContext.Controller).GetUser(); 

    if (user != null) 
    { 
     foreach (Role role in Roles) 
     { 
     if (role == user.Role) 
      return; 
     } 
    }  
    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
    if user.Role==Role.Administrator 
    { 
     redirectTargetDictionary.Add("action", "Unauthorized"); 
     redirectTargetDictionary.Add("controller", "Home"); 
    } 
    else 
    { 
     redirectTargetDictionary.Add("action", "Logon"); 
     redirectTargetDictionary.Add("controller", "Home"); 
    } 
    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 
    } 
} 
+1

धन्यवाद, आपने मुझे फिर से मदद की :) –

+2

यह समाधान अनधिकृत और अनौपचारिक अनुरोधों के लिए अनधिकृत पृष्ठ पर रीडायरेक्ट होगा –

+0

यह सच है। मैंने आपके बिंदु को प्रतिबिंबित करने के लिए अपना उत्तर लागू किया। – Iridio

3

ठीक है, आप AuthorizeAttribute से प्राप्त कर सकते हैं और HandleUnauthorizedRequest ओवरराइड कर सकते हैं जो अनौपचारिक/अनधिकृत अनुरोधों के पुनर्निर्देशन के लिए ज़िम्मेदार है। मुझे लगता है कि this question आपके लिए उपयोगी साबित होगा

+0

धन्यवाद है, आप मुझे exampel कोड दे सकते हैं? –

+0

जो प्रश्न मैंने संदर्भित किया है वह उदाहरण कोड है। अगर कोई समस्या है तो कृपया मुझे बताएं –

23

मैंने अपनी समस्या हल की। मैं केवल यह कर:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
    //you can change to any controller or html page. 
    filterContext.Result = new RedirectResult("/cpanel/roles/unauthorize"); 

    } 
} 

और वर्ग या कार्रवाई के लिए MyAuthorize लागू होते हैं:

[MyAuthorize] 
public class AdminController :Controller 
{ 
} 

यह thats।

0

मैं इस विधि का उपयोग करता हूं और इसे कार्यान्वित करना बहुत आसान है।

Securing Asp.net MVC3

, Global.asax में पेज logon को

1

मेरा अपना संस्करण आपके डिफ़ॉल्ट मार्ग बदले NTEP वोडका के आधार पर:

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if(IsUserAuthenticated(filterContext.HttpContext)) 
     { 
      filterContext.Result = new RedirectResult("/Account/InvalidRole"); 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 

    private bool IsUserAuthenticated(HttpContextBase context) 
    { 
     return context.User != null && context.User.Identity != null && context.User.Identity.IsAuthenticated; 
    } 
} 

इस तरह से मैं मानक रीडायरेक्ट के लिए पेज के लिए लॉग इन करने के लिए मिल प्रमाणित उपयोगकर्ता नहीं, और प्रमाणीकृत उपयोगकर्ताओं के लिए कस्टम रीडायरेक्ट लेकिन कार्रवाई के लिए उचित भूमिका नहीं है।

1

कोड के नीचे की मदद की और यहां stackoverflow में संदर्भ ASP.NET MVC 4 custom Authorize attribute - How to redirect unauthorized users to error page?

public class CustomAuthorize: AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if(!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else 
     { 
      filterContext.Result = new RedirectToRouteResult(new 
      RouteValueDictionary(new{ controller = "Error", action = "AccessDenied" })); 
     } 
    } 
} 
संबंधित मुद्दे