.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参数方面的处理

相关文章
相关标签/搜索