ASP.NET CoreはインターセプタIActionFilterで権限制御を実現

6581 ワード

「麦荻網教システム」は、前後端コード分離のアーキテクチャを採用している.すなわち、「Miidy.Cloud.Console」ステーションと「Miidy.Cloud.Manage」ステーション(2つのフロントエンドステーション)は同時にweb apiを通じて「Miidy.Cloud.RestWeb」webサービスを呼び出し、前後端コード分離の方式を達成する(詳細は麦荻網教システムのインストール配置ドキュメントを参照).「Miidy.Cloud.Manage」ステーションは管理権限を持つユーザーにのみ開放されるため、フロントエンドで制御を追加するほか、「Miidy.Cloud.RestWeb」サービス内で権限制御を行う必要がある.では、「Miidy.Cloud.RestWeb」のWebサービス内でユーザーによる権限制御をどのように実現するのでしょうか.
 
IActionFilter
Miidy.Cloud.RestWebプログラムでは、IActionFilterインタフェースを使用してリクエストのブロックを実現します.このインタフェースには、OnActionExecuted(Action実行後)、OnActionExecuting(Action実行前)の2つの方法が用意されています.必要に応じてOnActionExecutingを実現すればよい.
 
Attribute
「Attribute」プロパティを使用すると、「Miidy.Cloud.RestWeb」で指定したメソッド内で必要に応じてブロッキングを使用することができ、権限制御の目的を容易に達成できます.
 
インプリメンテーション
前述したように、実装全体の考え方が明らかになったので、「Miidy.Cloud.RestWeb」プログラムブロッキングのコード実装を見てみましょう.
1、まず「ManageVerifyAttribute」というブロッククラスを作成し、「Attribute」で終わり、「Attribute」クラスを継承し、「IActionFilter」を実装します.OnActionExecutionメソッドにビジネスコードを書き込みます.具体的なコードは以下の通りです. 1 2 namespace Miidy.Cloud.Provider 3 { 4 /// 5 /// RestApi 6 /// / 7 /// 8 /// 9 public class ManageVerifyAttribute : Attribute, IActionFilter 10 { 11 public void OnActionExecuted(ActionExecutedContext context) 12 { 13 } 14 15 /// 16 /// , 17 /// 18 /// 19 public void OnActionExecuting(ActionExecutingContext context) 20 { 21 if (context.HttpContext.User.Identity.IsAuthenticated) 22 { 23 var roleType = int.Parse(context.HttpContext.User.Claims.First(c => c.Type == "roleType").Value); 24 // 25 if (roleType <= 0 || roleType >= 4) 26 { 27 context.Result = new JsonResult(new Result(214)); 28 } 29 } 30 else 31 context.Result = new JsonResult(new Result(214)); 32 } 33 34 } 35 } 36
 
2、Web Apiの方法内に[ManageVerify]属性を打ち込むと、インターセプタの機能が実現できます.具体的には以下の通りです. 1 2 /// 3 /// , , 4 /// 5 /// 6 /// 7 [Route("SynchrDataByModel")] 8 [HttpPost] 9 [ManageVerify] 10 public async Task SynchrDataByModel(MC_Ware model) 11 { 12 var resul = await _WareCore.SynchrDataAsync(new List { model }); 13 if (resul <= 0) 14 return new Result(211); 15 return new Result(200); 16 }
 
 
まとめ
1、「IActionFilter」インタフェースに基づいて要求のブロックを実現する.
2、「Attribute」プロパティに基づいて、WebApiメソッド内で必要に応じてブロッキングを使用することができます.
 
宣言
本文は作者のオリジナルで、転載して出典と原文の住所を保留して、ありがとうございます.文章があなたに助けをもたらすことができるならば、推薦あるいは関心を押して、あなたの支持に感謝します!