1. 程式人生 > >.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)處理授權過濾

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

ons ppp url false 業務 ati htm num out

對於我們的組件頁面當然不是所有的用戶都能訪問,所以這裏我們需要添加一個我們自己定義的一些授權過濾條件,那麽這一塊怎麽來寫呢?

首先我們必然會想到中間件,前面章節說道了中間件路由,我們只需要在路由地址之前校驗一下就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是需要添加參數的,下一章節就來說下這個參數應該寫什麽,怎麽來寫

技術分享圖片

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