.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)處理授權過濾
阿新 • • 發佈:2018-12-29
ons ppp url false 業務 ati htm num out
對於我們的組件頁面當然不是所有的用戶都能訪問,所以這裏我們需要添加一個我們自己定義的一些授權過濾條件,那麽這一塊怎麽來寫呢?
首先我們必然會想到中間件,前面章節說道了中間件路由,我們只需要在路由地址之前校驗一下就ok了,有了這個思想我們就來實現一下
當然需要我們自己定義的一些規則,比如組件下面的地址都是根據pathstring來設計,有自己的規則,不然中間件會過濾到其他的中間件路由地址
不如 ,dashboard頁面是 /adminchain , 其他功能都可以以 /adminchain 以這個為開始 如: /adminchain/client
那麽我們在中間件路由地址前設置下:
stringrouteUrl = context.Request.Path; if (routeUrl.StartsWith(_options.PathRoute)) { //這裏做驗證 /* 這裏是驗證內容 */ if (routeUrl.Equals(_options.PathRoute)) {var view = new HomeIndex(); await view.ExecuteAsync(context); } } else { await _next(context); }
授權需要自定義,這裏就需要把這個加到DashboardOptions中去設置,這裏我們在裏面多添加了一個授權屬性 Authorization,並設置了默認的校驗規則
public class DashboardOptions { public DashboardOptions() { AppPath = "/"; PathRoute = "/adminchina"; Authorization = new[] { new DefaultAuthorizationFilter() }; } /// <summary> /// 返回應用路徑地址 /// </summary> public string AppPath { get; set; } /// <summary> /// route 地址 /// </summary> public string PathRoute { get; set; } /// <summary> /// 授權校驗過濾器 /// </summary> public IEnumerable<IDashboardAuthorizationFilter> Authorization { get; set; } }
在IDashboardAuthorizationFilter接口中我們只需要定義一個是否授權就行了,這裏我們先不給參數,後面在來做
public interface IDashboardAuthorizationFilter { bool IsAuthorize(); }
我們添加了DefaultAuthorizationFilter的默認實現,我們這裏來測試下 返回false的處理
public class DefaultAuthorizationFilter : IDashboardAuthorizationFilter { public bool IsAuthorize() { return false; } }
下來繼續來寫中間件裏面的驗證
//這裏做驗證 if (_options.Authorization.Any(auth => !auth.IsAuthorize())) { context.Response.ContentType = "text/html; charset=utf-8"; await context.Response.WriteAsync("這是沒有授權的頁面"); return; }
當我們訪問中間件的時候就經過授權過濾了,其實做到這裏其實還不夠,因為我們在中間件自定義授權過濾中要根據某些業務獲取某些服務,所以裏面必須要獲取某些服務,所以 IsAuthorize是需要添加參數的,下一章節就來說下這個參數應該寫什麽,怎麽來寫
.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)處理授權過濾