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

  • 相关阅读:
    报表设计器的使用之一:入门
    统计图开发之二:点图元
    统计图开发之一:画法定义
    集算器之五:序表
    集算器之四:程序流程
    忏悔录
    请不要离我而去
    所想和所做 所梦和所成
    做出改变,不断改变。
    Linux 操作命令
  • 原文地址:https://www.cnblogs.com/liyouming/p/10194845.html
Copyright © 2020-2023  润新知