一文搞懂:从零开始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
相关文章
|
8月前
|
机器学习/深度学习 人工智能 运维
10 分钟搞懂 LLMOps
10 分钟搞懂 LLMOps
487 0
|
8月前
|
人工智能 网络协议 算法
5 分钟搞懂 ECN
5 分钟搞懂 ECN
895 0
|
7天前
|
程序员
程序员必知:从零开始的ArduinoUNOR3
程序员必知:从零开始的ArduinoUNOR3
|
6天前
|
数据可视化 API
一文搞懂:【Havok】
一文搞懂:【Havok】
|
7天前
|
API
一文搞懂:关于串行接口
一文搞懂:关于串行接口
|
8天前
|
前端开发 JavaScript
一文搞懂:【Reduc】ReactCounterExample
一文搞懂:【Reduc】ReactCounterExample
|
8天前
一文搞懂:关于“isbuzy”问题
一文搞懂:关于“isbuzy”问题
|
8天前
|
PHP
一文搞懂:yeild理解
一文搞懂:yeild理解
|
8天前
|
机器学习/深度学习 定位技术
一文搞懂:【OpenJ_Bailian
一文搞懂:【OpenJ_Bailian
10 0
|
8天前
一文搞懂:【NISACTF2022】bqt
一文搞懂:【NISACTF2022】bqt

热门文章

最新文章