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

.NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤的更多相关文章

  1. .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  2. .NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  3. .NetCore 下开发独立的(RPL)含有界面的组件包 (三)构建界面

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  4. .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服务

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  5. .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  6. Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)

    ASP.NET Core知多少系列:总体介绍及目录 Demo路径:GitHub-RPL.Demo 1. Introduction Razor Page Library 是ASP.NET Core 2. ...

  7. 关于在Java EE 下开发web,出现项目中的外部包没有tomcat的包的原因

    在新建的项目的时候,要设置目标服务器运行环境,把那个设置成tomcat,这样,项目中就会有tomca的api

  8. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  9. .netcore下的微服务、容器、运维、自动化发布

    原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...

随机推荐

  1. 尚硅谷Oracle教程-学习笔记2

    控制用户权限 1.创建用户 1) SQL> create user atguigu01 2 identified by atguigu01; User created 2) SQL> gr ...

  2. web应用与http协议

    web应用 Web应用程序是一种可以通过web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户端/ ...

  3. python3-多装饰器的执行顺序

    [例]: def dec1(func): print("HHHA:0====>") def one(): print("HHHA:0.1====>" ...

  4. mysql使用group_by

    GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等 常用聚合函数 count() 计数 sum() 求和 avg() 平均数 max() 最 ...

  5. c++ 值转换

    1.double,float 四舍五入,保留小数位数. void MainWindow::on_pushButton_clicked() { double number=3.141592; ); qD ...

  6. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  7. LabVIEW版本控制(转)

    原文转自https://www.cnblogs.com/EltonLiang/p/7105034.html 在我们工作中,必然会遇到代码的多个版本问题,也必然会遇到版本控制问题.如果所在的公司具有良好 ...

  8. [转]PHP中file_put_contents追加和换行

    在PHP的一些应用中需要写日志或者记录一些信息,这样的话. 可以使用fopen(),fwrite()以及 fclose()这些进行操作. 也可以简单的使用file_get_contents()和fil ...

  9. oracle存储大文本clob、blob

    oracle存储大文本clob.blob 1 package cn.itcast.web.oracle.util; 2 3 import java.sql.Connection; 4 import j ...

  10. FormData中delete方法在ios不兼容

    1.移动端直接用的input的file上传图片(name=“file”必填) <input type="file" id="exampleInputFile1&qu ...