.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是需要添加参数的,下一章节就来说下这个参数应该写什么,怎么来写

原文地址:https://www.cnblogs.com/liyouming/p/10194845.html

时间: 2024-10-31 06:24:31

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

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

在前面的基础上我们来添加引入我们的视图以及资源文件,Resource 用来放我们的资源文件 js css等,Views用来放我们的视图cshtml页面,这里需要注意的是 这个采用razorview来编译的视图文件夹的名称必须为 Views 我准备了下载了一套后台管理的界面并添加进去了 这个时候就需要用到我们的DotNetCliTool工具了 使用命令操作 生成 视图对应的页面类 dotnet razorpagegenerator IdentityServer4.AdminChina 这个类是根据

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

前面一篇中处理授权类,但是不难发现我们时间上处理业务也是难以扩展,为了做到更好的扩展,我这里需要加入一些参数来做处理,加入什么参数合适呢? 其实在中间件中有 上下文对象  HttpContext,有了这个类我们能做的事情就多了,获取Request .Response以及RequestServices ,获取DI中注册的服务操作自己的业务做验证 那么怎么来处理这个类呢? 是不是直接把HttpContext直接传过去呢? 其实也是可以的,但是为了安全不暴露一些不必要的操作以及设置对一些属性扩展,我们

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

微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并采用轻量级的通讯机制(TCP)进行通信.这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署.这些服务的集中化管理已经是最少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术. 1.1.2       为什么要用微服务? 1.1.2.1   微服务解决了什么问题? 在微服务的最佳实践

WINDOWS下用XWin32 连接Linux图形界面

如果有WINDOWS想用图形界面管理远程的LINUX服务器,或调试Linux图形软件.用Xwin32这个商业软件可能是一个选项,它很小,但是功能齐全. Windows下可以通过SSH客户端或Telnet程序远程登录到Linux/Unix 上进行管理,编程开发和调试字符界面程序.比如用Magic Unix C++这样的Windows 下的集成开发环境.界面完全模仿VC++ 6.0.可以象VC++单步调试Windows程序一样,去调试Linux或Unix远程主机应用程序.非常高效和方便. Linux

4.1. 如何在Windows环境下开发Python

4.1. 如何在Windows环境下开发Python 4.1. 如何在Windows环境下开发Python 4.1.1. Python的最原始的开发方式是什么样的 4.1.1.1. 找个文本编辑器,新建个.py文件,写上Python代码 4.1.1.2. 打开Windows的cmd,并且切换到对应的python脚本所在目录 4.1.1.2.1. 方法1:手动打开cmd,并cd到对应路径 4.1.1.2.2. 方法2:通过Notepad++的Open current dir cmd 4.1.1.3

[转帖]linux下的X server:linux图形界面原理

linux下的X server:linux图形界面原理 https://www.cnblogs.com/liangxiaofeng/p/5034912.html linux下的X server:linux图形界面原理 Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开机后直接进入文本命令行,所以这方面了解得很少,需要学习一下. 严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用L

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建 选择Linux桌面环境Deepin2014.1下开发网站的理由很简单,能截图,有搜狗输入法,可以WPS文档记录,终端下复制粘贴很容易,相比ubuntu,fedora死机次数少了,对,就是不用折腾,自带的. 先说vim和DBGp插件. Deepin2014.1简体中文,自带的vim7.4版本,很多配置已经很适合大陆的人使用了,比如Php和Python的调试支持等,不需要重新编译了.可以节省不少步骤.这里提供一个vim的配

android下apkplug通用主题(皮肤)切换解决方案之主题包开发-02

该文章是基于apkplug V1.6.8 进行说明的 我们提供了一个demo做为参考,项目下载地址为:http://git.oschina.net/plug/IMThemeDemo 该 IMThemeDemo 实现了简单的聊天泡泡切换功能,同时主题包(插件)是托管在apkplug的云服务器上的.所以要阅读项目的完整代码可以先看插件托管服务开发系列文章 <插件托管服务开发指南> demo运行效果图: 上一篇文章我们实现了主应用的开发,本篇应用我们开发主题包(插件). 一,主题包说明 apkplu

使用eclipse在linux下开发C/C++

一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译.调试代码也只能是命令行用gdb进行调试,相当痛苦. 现在推荐一个可行的方法:jre + eclipse + Xming + SecureCRT 或 Putty 1. 由于eclipse是基于java的,所以必须按照jre,可用下载:jre-8u5-linux-i586.rpm 2. 安装eclipse也很简单,直接到官网下载eclipse-c