一文搞懂:从零开始BlazorServer(7)

简介: 一文搞懂:从零开始BlazorServer(7)

"

上面两篇我们讲了怎么用OnNavigateAsync来验证权限,又写了怎么用策略来验证权限。

其实我们既然集成了Fution,就可以用Furion带的方式来验证。

创建AdminHandler

我们还是去创建AdminHandler,但是跟策略不一样的是我们的Handler不继承于AuthorizationHandler,而是继承Furion的AppAuthorizeHandler。

public class AdminHandler : AppAuthorizeHandler

AppAuthorizeHandler有//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQwNTQxNg==.html

两个比较重要的方法。

public override Task[span class=""hljs-type"">bool

public override async Task HandleAsync(AuthorizationHandlerContext context)

PipelineAsync进入的时候已经完成了基本的验证,能确定该用户已经登录了,返回值是一个bool。

HandleAsync就是我们使用策略时的HandleRequirementAsync,也需要用context.Succeed来做处理。

这里我们就直接使用PipelineAsync就行了,比较省心。所以我们的代码如下:

public override Task[span class=""hljs-built_in"">bool

{

if (!int.TryParse(context.User.FindFirst(ClaimTypes.Role)?.Value, out var roleId))

{

return Task.FromResult(false);

}

if (context.Resource is RouteData routeData)

{

var routeAttr = routeData.PageType.CustomAttributes.FirstOrDefault(x =>

x.AttributeType == typeof(RouteAttribute));

if (routeAttr == null)

{

return Task.FromResult(true);

}

else

{

var url = routeAttr.ConstructorArguments【0】.Value as string;

var permission = PermissionEntity

.Where(x => x.Roles!.Any(y => y.Id == roleId) && x.Url == url).First();


//代码效果参考: https://v.youku.com/v_show/id_XNjQwMDQxMTQwMA==.html

if (permission != null)

{

return Task.FromResult(true);

}

}

}

return Task.FromResult(false);

}

整体的逻辑与使用策略时相同。这里不再多说了。

App.razor

App里一样要加上Resource=""@routeData"" ,不然我们无法获取到路由信息。

Pragram.cs

我们同样需要在Proagram.cs里注册我们的Handler,但是比使用策略注册要简单的多,只需要一句话。

builder.Services.AddAppAuthorizationspan class=""hljs-name"">AdminHandler</span;使用

我们的Handler默认是默认策略,所以我们不需要在加策略名称,只需要在需要使用的地方,比如index.razor中增加


@attribute 【Authorize】

即可。

源码在github:分支lesson7.


"
image.png
相关文章
|
前端开发 JavaScript C++
打造卓越 QML 层级设计:从入门到精通(一)
打造卓越 QML 层级设计:从入门到精通
3135 1
|
传感器 监控 测试技术
Visual Studio 2022 常用快捷键,记录一下别忘记~
Visual Studio 2022 常用快捷键,记录一下别忘记~
1971 0
|
JSON 前端开发 数据格式
vue-cli3读取本地json文件
vue-cli3读取本地json文件
229 1
|
存储 运维 监控
基于EF Core存储的Serilog持久化服务
【7月更文挑战第5天】EF Core 和 Serilog 整合实现日志持久化\n通过 EF Core ORM 将 Serilog 日志记录存储到数据库,提供灵活的日志管理。步骤包括:配置 EF Core 数据库上下文(定义 `LogEntry` 实体,设置数据库连接)、配置 Serilog(指定 EF Core 接收器,定义日志格式和过滤规则)、实现 EF Core 接收器(转换日志事件为实体并保存)。示例中,`LogEntry` 类包含日志信息,`LogDbContext` 用于数据库交互,Serilog 使用 `EfCoreSink` 将日志写入数据库,便于后期查询和分析。
210 5
|
缓存 openCL 算法
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
关于实现Halcon算法加速的基础知识(多核并行/GPU)
3995 0
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
|
12月前
|
C#
LiveCharts 直方图详解,安装和使用,以及常用属性的说明
本文介绍了LiveCharts在WPF中的应用,包括安装方法、基本使用和直方图(LineSeries)的常用属性说明。安装LiveCharts通过NuGet包管理器进行,使用时需在XAML文件中引入相应的命名空间。文章还提供了直方图的属性详解和综合示例,包括线条样式、坐标轴标签、图例位置等设置,以及如何自定义数据点形状。
LiveCharts 直方图详解,安装和使用,以及常用属性的说明
|
11月前
|
Web App开发 网络协议 API
基于C#编写一个远程桌面应用
基于C#编写一个远程桌面应用
414 0
|
C# 开发者
全面提升开发效率:详解如何使用Blazor Server与SignalR打造实时Web应用,从零开始构建聊天室示例并掌握实时通信核心技术
【8月更文挑战第31天】提高生产力不仅关乎效率提升,更在于用更少时间完成更多任务。本文将通过具体代码示例,介绍如何结合 Blazor Server 和 SignalR 构建实时 Web 应用。从创建 Blazor 项目到添加 SignalR 支持,再到实现客户端与服务器间的实时通信,每个步骤都详细讲解。通过这一组合,C# 开发者能获得前后端一致的编程体验,轻松打造高效、响应迅速的实时应用。实时通信功能已在社交、协作等多个领域发挥重要作用,本文将助你掌握这一强大技术组合。
466 0
|
开发框架 前端开发 C#
从零开始学 Blazor 创建 Web 应用,入门指南超详细!带你轻松开启精彩的开发之旅!
【8月更文挑战第31天】在互联网时代,Web应用开发愈发重要,Blazor作为新兴框架,允许使用C#和.NET技术构建交互式Web应用,提高开发效率与代码可维护性。本文将从零开始引导读者了解Blazor的基本概念,安装设置步骤,项目创建及运行方法。通过简单的示例介绍Blazor的基本结构,包括Pages、Shared等文件夹用途,以及Program.cs文件的功能。同时,还将演示如何创建Razor页面和组件,实现数据绑定与事件处理,帮助读者快速入门Blazor开发。
1283 0
|
SQL 关系型数据库 MySQL
MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化
531 4

热门文章

最新文章