.NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
.NetCore 下開發獨立的(RPL)含有界面的組件包 (一)準備工作
.NetCore 下開發獨立的(RPL)含有界面的組件包 (二)擴展中間件及服 務
.NetCore 下開發獨立的(RPL)含有界面的組件包 (三)構建界面
.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)授權過濾
.NetCore 下開發獨立的(RPL)含有界面的組件包 (五)授權過濾參數處 理
.NetCore 下開發獨立的(RPL)含有界面的組件包 (六)實現業務功能
對于我們的組件頁面當然不是所有的用戶都能訪問,所以這里我們需要添加一個我們自己定義的一些授權過濾條件,那么這一塊怎么來寫呢?
首先我們必然會想到中間件,前面章節說道了中間件路由,我們只需要在路由地址之前校驗一下就ok了,有了這個思想我們就來實現一下
當然需要我們自己定義的一些規則,比如組件下面的地址都是根據pathstring來設計,有自己的規則,不然中間件會過濾到其他的中間件路由地址
不如 ,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參數方面的處理
?
轉載于:https://www.cnblogs.com/liyouming/p/10194845.html
總結
以上是生活随笔為你收集整理的.NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归求链表的长度
- 下一篇: Animator动画XML实现