0

Ich habe Webapi-Aktion, die mit customauthattribute für die Autorisierung dekoriert ist. Dieses Attribut überprüft intern mit db, wenn der aktuelle Benutzer über Berechtigungen für Benutzer verfügt. Jemand weiß besser, es zu handhaben, anstatt CustomAttribute zu verwenden. kann irgendwo abfangen und alle Berechtigungsprüfungen für Benutzer/Freigabe/Ressource ausführen, auf die er zuzugreifen versucht: zB getcustomer für Kundennummer 10. Wenn Benutzer also keinen Zugriff hat, siehe Kunden-ID 10, sollte er den Status 403 erhalten.Alternative Möglichkeit, Controller-Aktion Autorisierung anstelle von CustomAttribute

[CheckPermission(Process.CustomerManagment,Permissions.View)] 
public IHttpActionResult GetCustomer(int customerId) 
{ 
} 
+0

Sie könnten einen globalen Filter hinzufügen, aber das bedeutet, dass der Code vollständig getrennt ist Von Ihren Aktionsmethoden kann also etwas verwirrend sein. – DavidG

+0

gibt es einen anderen Weg statt Attribute oder globale Attribute zu verwenden? – krishna

Antwort

0

Sie können in der Konfiguration Ihrer Web-API globale Filter hinzufügen.

Praktisch in Ihrer Startklasse (startup.cs oder webapi.config) Sie können

 var config = new HttpConfiguration(); 
     config.Filters.Add(new MyAuthFilterAttribute()); 

Auf diese Weise die folgende Methode auf dem httpconfiguration nennen Objekt sie global für alle Ihre api Anrufe sein wird.

Sie sollten die IAuthenticationFilter-Schnittstelle erweitern.

werfen Sie einen Blick hier für die Dokumentation webapi documentation

0

Eine Möglichkeit wäre, einen Filter zu erstellen, die Sie global anwenden können. Zum Beispiel so etwas. Ja, es ist schrecklich, aber gibt Ihnen einen Start:

public class GlobalAuthoriseAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; 
     var actionName = filterContext.ActionDescriptor.ActionName; 

     switch (controllerName) 
     { 
      case "Home": 
       //All call to home controller are allowed 
       return; 
      case "Admin": 
       filterContext.Result = new HttpUnauthorizedResult(); 
       return; 
     } 
    } 
} 

Jetzt können Sie diese auf Ihre gesamte App in der App_Start\FilterConfig.cs Datei hinzufügen:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new GlobalAuthoriseAttribute()); 
} 
Verwandte Themen