2017-08-07 5 views
0

In meinem ASP.NET Web-API-Projekt habe ich eine benutzerdefinierte Klasse die Rollen Eigenschaft für das Autorisieren Attribut außer Kraft zu setzen.Wo erfolgt die ASP.NET-Autorisierung?

public class AuthorizeRolesAttribute : AuthorizeAttribute 
    { 
     public AuthorizeRolesAttribute(params Roles[] roles) : base() 
     { 
      if (roles.Length == 1) 
       Roles = ((int)roles[0]).ToString(); 
      else 
      { 
       for (int i = 0; i < roles.Length; i++) 
       { 
        var role = ((int)roles[i]).ToString(); 

        if (i == 0) // First role 
        { 
         Roles = role + ","; 
         continue; 
        } 

        if (i == (roles.Length - 1)) // Last role 
        { 
         Roles = Roles + role; 
         break; 
        } 
        Roles = Roles + "," + role; 
       } 
      } 
     } 

    } 

public enum Roles : int 
    { 
     User1 = 1, 
    } 

Nimmt man nun an, dass ich eine API genannt habe, aber die Anforderung nicht über das „User1“ role-Attribut, Wo kann ich einen Haltepunkt setzte die eigentliche Prüfung und Vergleich der Rolle zu sehen, die ich habe von der Anfrage mit der Rolle, die an eine bestimmte API angehängt ist. Muss ich eine andere Klasse schreiben, die einer anderen Klasse inhärent ist?

Antwort

0

Es würde passieren bei AuthorizationFilter Abschnitt, und Sie sollten Ihr Attribut anstelle von [Authorize] Attribut entweder pro Controller/pro API-Endpunkt/global verwenden. Sie sollten einen Haltepunkt in Ihren benutzerdefinierten Autorisierungscodeblock einfügen.

Also, sobald Sie eine Anfrage stellen und es zu Authorization erreicht, sollte Ihr benutzerdefinierten Attribut-Code-Block gut treffen. Auch hier müssen Sie Ihr benutzerdefiniertes Attribut in der Pipeline config registrieren.

0

Da Sie Web API verwenden, benötigen Sie System.Web.Http.AuthorizeAttribute. Das ist das Autorisierungsattribut für ApiControllers. Nicht das gleiche wie für MVC Controller.

Erstellen Sie Ihr Kundenattribut, das es erweitert, überschreiben Sie seine OnAuthorize Methode, in die Sie setzen, was auch immer Ihre Autorisierungslogik ist und dekorieren Sie Ihre Controller-Aktion damit. Sobald die Aktion ausgeführt wird, wird der in OnAuthorize eingestellte Haltepunkt ebenfalls getroffen.

Verwandte Themen