一文搞懂:从零开始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
相关文章
|
3月前
|
Java 程序员 编译器
从零开始的八股文
Java基础知识概要:Java代码因JVM而具备跨平台能力,源码编译成字节码,由JVM在各平台解释执行。一个Java文件可含多个类(非内部类)。访问权限包括private、default、protected、public。数据类型分基本(如int、char、boolean)和引用(数组、类、接口)。int占4字节,范围-2^31~2^31-1。全局变量等同于成员变量,局部变量仅限作用域内。包装类解决基本类型与对象特性问题,支持自动装箱拆箱。Integer与Double相等比较需先转换为相同基本类型再用`==`。
|
2月前
|
存储 编译器 数据处理
【编程秘籍】解锁C语言数组的奥秘:从零开始,深入浅出,带你领略数组的魅力与实战技巧!
【8月更文挑战第22天】数组是C语言中存储同类型元素的基本结构。本文从定义出发,详述数组声明、初始化与访问。示例展示如何声明如`int numbers[5];`的数组,并通过下标访问元素。初始化可在声明时进行,如`int numbers[] = {1,2,3,4,5};`,编译器自动计算大小。初始化时未指定的元素默认为0。通过循环可遍历数组,数组名视为指向首元素的指针,方便传递给函数。多维数组表示矩阵,如`int matrix[3][4];`。动态数组利用`malloc()`分配内存,需用`free()`释放以避免内存泄漏。掌握这些技巧是高效数据处理的基础。
55 2
|
2月前
|
算法 数据挖掘 开发者
探索编程之美:从小白到大牛的代码之旅从零到一:我的Python编程之旅
【8月更文挑战第30天】在数字世界的编织中,代码是构成一切的基石。本文将带领读者踏上一段代码探索之旅,从最初的迷茫与困惑,到逐渐找到方向,再到深入理解编程的本质和美学。通过个人的技术感悟和成长历程,我们将一同见证如何通过持续学习、实践和创新,在编程的道路上越走越远。
|
4月前
|
程序员
程序员必知:从零开始的ArduinoUNOR3
程序员必知:从零开始的ArduinoUNOR3
72 0
|
4月前
|
JSON 网络协议 Shell
一文搞懂:【Day29】Soket编程
一文搞懂:【Day29】Soket编程
21 0
|
5月前
|
开发框架 .NET Linux
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
|
5月前
|
NoSQL 应用服务中间件 Shell
从零开始掌握Docek的基础知识与应用技巧
从零开始掌握Docek的基础知识与应用技巧
|
5月前
|
机器学习/深度学习 人工智能 数据可视化
Python编程入门:从零开始探索编程的奇妙世界
这篇教程引导初学者入门Python编程,从安装Python开始,逐步讲解基本语法,如`print()`、变量、条件判断、循环以及自定义函数。文章强调了Python在数据处理、数据分析、人工智能和机器学习等领域的重要性,并鼓励学习者探索Python的广泛应用,开启编程之旅。
|
5月前
|
C++
C/C++函数从零到底层原理
C/C++函数从零到底层原理
|
前端开发 测试技术 数据安全/隐私保护
测开入门(附常考面试题)(上)
测开入门(附常考面试题)(上)
182 0