.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)受權過濾

.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參數方面的處理

相關文章
相關標籤/搜索