.NetCore 下開發獨立的(RPL)含有界面的組件包 (一)準備工做 html
.NetCore 下開發獨立的(RPL)含有界面的組件包 (二)擴展中間件及服 務app
.NetCore 下開發獨立的(RPL)含有界面的組件包 (三)構建界面 測試
.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)受權過濾 spa
.NetCore 下開發獨立的(RPL)含有界面的組件包 (五)受權過濾參數處 理設計
.NetCore 下開發獨立的(RPL)含有界面的組件包 (六)實現業務功能 code
對於咱們的組件頁面固然不是全部的用戶都能訪問,因此這裏咱們須要添加一個咱們本身定義的一些受權過濾條件,那麼這一塊怎麼來寫呢?htm
首先咱們必然會想到中間件,前面章節說道了中間件路由,咱們只須要在路由地址以前校驗一下就ok了,有了這個思想咱們就來實現一下中間件
固然須要咱們本身定義的一些規則,好比組件下面的地址都是根據pathstring來設計,有本身的規則,否則中間件會過濾到其餘的中間件路由地址blog
不如 ,dashboard頁面是 /adminchain , 其餘功能均可以以 /adminchain 以這個爲開始 如: /adminchain/client 接口
那麼咱們在中間件路由地址前設置下:
string routeUrl = 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是須要添加參數的,下一章節就來講下這個參數應該寫什麼,怎麼來寫
固然這裏是採用了默認的受權過濾,這裏咱們來添加一個本身的Filter,首先咱們在WebTest中的UseAdminChina修改下,索性咱們就把地址一塊兒修改下,首先添加一個自定義的過濾器
public class CustomAuthorizeFilter : IDashboardAuthorizationFilter { public bool IsAuthorize() { return true; } }
而後在Configure中修改下中間件
app.UseAdminChina(options=> { options.PathRoute = "/adminchinatest"; options.Authorization = new[] { new CustomAuthorizeFilter() }; });
因爲這裏參數,因此爲了達到測試效果,我將默認的受權改爲了true,將自定義的改爲了false,用來測試自定義的過濾接口知否被處理
public class CustomAuthorizeFilter : IDashboardAuthorizationFilter { public bool IsAuthorize() { return false; } }
咱們訪問以前的地址發現已經沒有了
訪問下新的地址
至此,發現咱們正在想hanfire這類組件慢慢的靠近,下一篇寫一點Filter參數方面的處理