2017-12-11 1 views
-2

Ich probiere das folgende Szenario in ASP.NET MVC aus. Ich möchte eine einfache MVC-Anwendung erstellen, wo ich einen benutzerdefinierten IAuthorizationFilter erstellen möchte, der nur eine SQL-Anweisung ausführen sollte, um zu überprüfen, ob ein Benutzer existiert. Wenn der Benutzer existiert, dann gehen Sie weiter, andernfalls auf eine andere Ansicht umleiten.So verwenden Sie ordnungsgemäß IAuthorizationFilter in einer MVS-Lösung, um eine Berechtigung zu überprüfen und umzuleiten

ich eine neue Klasse für die benutzerdefinierten Filter erstellt:

public class CustomAuthorizationAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     filterContext.Controller.ViewBag.AutherizationMessage = "Custom Authorization: Message from OnAuthorization method."; 
    } 
} 

In der Aktion, wo ich für den Benutzer i hinzugefügt, um die Filter überprüfen wollte:

[CustomAuthorizationAttribute] 
    public ActionResult Index() 
    { 
     ViewBag.Title = "Home Page"; 

     return View(); 
    } 

In der Ansicht hinzugefügt i der Ausgangswert:

Im Allgemeinen, wenn ich die Lösung durchführe und die Aktion ausführe, empfange ich t Die Nachricht auf der Website wie erwartet.

Aber ich weiß, ich ein reales Welt-Szenario, wie und wo die Prüfung implementieren und wie auf Nicht autorisiert umleiten?

Antwort

0

1.Erstellen Ihre benutzerdefiniertes Attribut autorisiert, wie unten erwähnt: 2.Create eine Aktion in Ihrem Controller ungültiges Benutzerhandling (in folgendem Beispiel wie Restricted Aktion in Heimsteuerung, diese Aktion zurückkehrt einfach einen Blick)

public class CustomAuthorize : AuthorizeAttribute 
    { 


     protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext) 
     { 
      if (filterContext.HttpContext.Request.IsAuthenticated) 
      { 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Restricted" }));// Create an Action name "Restricted" in your home controller or call whatever action you need to call. 
      } 
      else 
      { 
       base.HandleUnauthorizedRequest(filterContext); 
      } 
     } 

     protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      var authorized = base.AuthorizeCore(httpContext); 


      if (!authorized) 
      { 
       // The user is not authenticated 
       return false; 
      } 
      string user = HttpContext.Current.User.Identity.Name; 

      bool isUser = IsAppUser(user); 

      return isUser; 

     } 

     private bool IsAppUser(string user) 
     { 

      //Check existence of your user and return true or false as per the condition 

     } 



    } 

Verwenden Sie jetzt dieses benutzerdefinierte Autorisierungsattribut in Ihrer Aktion, wo immer Sie es benötigen. hoffe das hilft dir :)

Verwandte Themen