0

私はwebapiのアクションを持っています。これは承認のためにカスタムの属性を装飾しています。この属性は、現在のユーザーにviewcustomer権限があるかどうかをdbで内部的にチェックします。誰もがカスタム属性を使用する代わりに、それを処理するより良い方法を知っていますか?アクセスしようとしているuser/permisson/resourceの権限チェックを実行している可能性があります。たとえば、customer id 10のgetcustomer。ユーザーがアクセスできない場合、彼は403のステータスを取得する必要があります。customattributeを使用する代わりにコントローラーのアクションの承認を処理する代わりの方法

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

あなたはグローバルフィルタを追加できますが、それはコードが完全に分離していることあなたの行動の方法から少し混乱することができます。 – DavidG

+0

は、属性またはグローバル属性を使用する代わりに他の方法がありますか? – krishna

答えて

0

ウェブAPIの設定でグローバルフィルタを追加できます。スタートアップクラス(startup.csまたはwebapi.config)には事実上

あなたはそれがすべてのAPI呼び出しのためのグローバルとなります。このように、以下の方法

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

オブジェクトhttpconfigurationに呼び出すことができます。

IAuthenticationFilterインターフェイスを拡張する必要があります。

webapi documentation

0

一つのオプションは、グローバルに適用可能なフィルタを作成することですドキュメントについてはこちらをご覧ください。たとえば、次のようなものです。はい、それは恐ろしいですが、あなたのスタートを与える:今、あなたはApp_Start\FilterConfig.csファイルにあなたの全体のアプリにこれを追加することができます

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; 
     } 
    } 
} 

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new GlobalAuthoriseAttribute()); 
} 
関連する問題