在Blazor 中自定义权限验证

outside_default.png

Blazor是什么

Blazor 是微软在 .NET 里推出的一个 WEB 客户端 UI 交互的框架,

使用 Blazor 你可以代替 JavaScript 来实现自己的页面交互逻辑,可以很大程度上进行 C# 代码的复用,Blazor 对于 .NET 开发人员来说是一个不错的选择。

需求背景

其实我对着这东西是挺反感的,但是没办法,这个是之前别人遗留的项目,那个哥们干了2个月就走人了。我那时候正好入职,也就交接给我了。我当时的态度是代码能正常编译运行就好了。其他的业务对不对就交给测试人员去验证。

之前只是实现了业务功能,但是连个权限验证也没有,现在要上线了,总不能裸奔吧,所以就需要加个权限验证。

代码实现

1、在公共部分 App.razor 加个输入用户名、验证码

<Form Model="@_vm.Data"      Loading="_vm.Loading"      LabelColSpan="8"      WrapperColSpan="16"><FormItem><Input @bind-Value="@context.username" /></FormItem><FormItem><Input @bind-Value="@context.userpwd" /></FormItem><FormItem WrapperColSpan="24" Style="text-align:center"><Button  HtmlType="button" OnClick="@( async () =>await login())">登录</Button></FormItem>
</Form>复制代码

2、实现登录事件OnClick="@( async () =>await login())

private loginVm _vm = new loginVm();    public async Task login(){var result = _vm.Data;        if(result.username=="xxxx" &&  result.userpwd=="xxxxxxx"){await JsRuntime.InvokeAsync<string>("InitialCarousel");           Logined = true;        }else{ResetForm();            Logined = false;              await JsRuntime.InvokeAsync<string>("alerterror");        }}private void ResetForm(){_vm.Data.username = "";        _vm.Data.userpwd = "";    }public bool Logined;      protected override async Task OnInitializedAsync(){await base.OnInitializedAsync();            try{var TValue = await JsRuntime.InvokeAsync<string>("returnInitialCarousel");             if(!string.IsNullOrWhiteSpace(TValue)){Logined = true;            }else{Logined = false;            }     }catch (Exception ex){Logined = false;  }}
}复制代码

3、页面做个判断,有权限正常显示,没权限显示登录界面

<Router AppAssembly="@typeof(Program).Assembly"><Found Context="routeData">@if(Logined){<RouteView RouteData="@routeData" DefaultLayout="@typeof(BasicLayout)" />}else{<LayoutView Layout="@typeof(BasicLayout)">
<Form Model="@_vm.Data"      Loading="_vm.Loading"      LabelColSpan="8"      WrapperColSpan="16"><FormItem><Input @bind-Value="@context.username" /></FormItem><FormItem><Input @bind-Value="@context.userpwd" /></FormItem><FormItem WrapperColSpan="24" Style="text-align:center"><Button  HtmlType="button" OnClick="@( async () =>await login())">µÇ¼</Button></FormItem>
</Form></LayoutView>}      </Found><NotFound><LayoutView Layout="@typeof(BasicLayout)"><p>Sorry, there's nothing at this address.</p></LayoutView></NotFound>
</Router><AntContainer />复制代码

4、这里我是用cookies做判断,登录的时候写入cookies,直接调用js方法实现

<script>function alerterror() {console.log(333);         alert("账号或密码错误");     }function InitialCarousel() {console.log(222);            document.cookie = "username=John Doe; path=/";        }function returnInitialCarousel() {console.log(111);            var cname = "username";            var name = cname + "=";            var ca = document.cookie.split(';');            for (var i = 0; i < ca.length; i++) {                var c = ca[i].trim();                if (c.indexOf(name) == 0) return c.substring(name.length, c.length);            }return "";        }</script>复制代码

效果

outside_default.png

outside_default.png

outside_default.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS微课1000例】0035:地图面状符号设计教程

地图符号是表示地图内容的基本手段,它由形状不同、大小不一、色彩有别的图形和文字组成。 地图符号是地图的语言,是一种图形语言。它与文字语言相比较,最大的特点是形象直观,一目了然。 本文讲解ArcGIS中面状符号设计方法。 文章目录 一、新建符号样式二、面状符号设计1. 斜…

MySQL夺命15问,你能坚持到第几问?

前言 MySQL在面试中经常被问到&#xff0c;本文总结了面试中的经典问题。 1. 数据库三大范式是什么&#xff1f; 第一范式&#xff1a;每个列都不可以再拆分。 第二范式&#xff1a;在第一范式的基础上&#xff0c;非主键列完全依赖于主键&#xff0c;而不能是依赖于主键的一部…

ios元素定位

原文地址http://www.cnblogs.com/meitian/p/7373460.html 第一种&#xff1a;通过Appium1.6的Inspector来查看 具体安装方式前面的随笔已经介绍了&#xff1a;http://www.cnblogs.com/meitian/p/7360017.html可以通过定位找到元素xpath或name个人不推荐用这个方法&#xff0c;实…

使用 LSM-Tree 思想基于.NET 6.0 C# 写个 KV 数据库(案例版)

文章有点长&#xff0c;耐心看完应该可以懂实际原理到底是啥子。这是一个KV数据库的C#实现&#xff0c;目前用.NET 6.0实现的&#xff0c;目前算是属于雏形&#xff0c;骨架都已经完备&#xff0c;毕竟刚完工不到一星期。当然&#xff0c;这个其实也算是NoSQL的雏形&#xff0c…

35.使用拦截器实现权限验证

转自&#xff1a;https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 为了说明此问题&#xff0c;我们建立struts2auth项目&#xff0c;流程图如下&#xff1a; 简短说明&#xff1a;当我们访问main.jsp页面&#xff0c;并试图通过此页面中的链接地址&#xff1a;not…

如何保证缓存和数据库的一致性?

1. 问题分析 2. Cache-Aside 2.1 读缓存 2.2 写缓存 2.3 延迟双删 2.4 如何确保原子性 3. Read-Through/Write-Through 3.1 Read-Through 3.2 Write-Through 4. Write Behind 很多小伙伴在面试的时候&#xff0c;应该都遇到过类似的问题&#xff0c;如何确保缓存和数据库…

Pressed状态和clickable,duplicateParentState的关系

做Android开发的人都用过Selector,可以方便的实现View在不同状态下的背景。不过&#xff0c;相信大部分开发者遇到过和我一样的问题&#xff0c;本文会从源码角度&#xff0c;解释这些问题。 首先&#xff0c;这里简单描述一下&#xff0c;我遇到的问题&#xff1a; 界面上有个…

【招聘(南京)】 慧咨环球南京研发中心 .NET和Blazor 前端

主要的亮点快速增长的、产品导向型的全球性科技公司设计和开发市场领先的软件解决方案WLB — 工作生活相平衡澳洲排名前五的软件公司混合办公 — 3天在家办公&#xff0c;2天在办公室办公在C#和.NET开发&#xff0c;企业级系统研发&#xff0c;软件工程方面有长期的优秀实践和技…

用Python+Django在Eclipse环境下开发web网站【转】

一、创建一个项目如果这是你第一次使用Django&#xff0c;那么你必须进行一些初始设置。也就是通过自动生成代码来建立一个Django项目--一个Django项目的设置集&#xff0c;包含了数据库配置、Django详细选项设置和应用 特性配置&#xff0c;具体操作步骤如下所示。 1.新建Djan…

[转]数据结构KMP算法配图详解(超详细)

KMP算法配图详解 前言 KMP算法是我们数据结构串中最难也是最重要的算法。难是因为KMP算法的代码很优美简洁干练&#xff0c;但里面包含着非常深的思维。真正理解代码的人可以说对KMP算法的了解已经相当深入了。而且这个算法的不少东西的确不容易讲懂&#xff0c;很多正规的书本…

BGP-MED-2

BGP-MED-2如图&#xff1a;当AS100去往AS300的60、10的网络时&#xff0c;60走R3&#xff0c;10走R1!使用MED属性影响选路&#xff01; R2的配置 bgp 200peer 1.1.1.1 as-number 100 peer 1.1.1.1 ebgp-max-hop 255 peer 1.1.1.1 connect-interface LoopBack0peer 4.4.4.4 as-n…

WPF 实现 Gitee 气泡菜单(一)

WPF 实现 Gitee 气泡菜单&#xff08;一&#xff09;气泡菜单&#xff08;一&#xff09;作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开…

[转]LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

一、LVS简介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩博士主导的开源负载均衡项目&#xff0c;目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案&#xff0c;其体系结构如图1…

一张图看懂微软Power BI系列组件

一、Power BI简介 Power BI是微软最新的商业智能&#xff08;BI&#xff09;概念&#xff0c;它包含了一系列的组件和工具。话不多说&#xff0c;直接上图吧&#xff1a; Power BI的核心理念就是让我们用户不需要强大的技术背景&#xff0c;只需要掌握Excel这样简单的工具就能快…

互联网项目总结

2019独角兽企业重金招聘Python工程师标准>>> 从去年年底开始专门被分配到互联网小组做项目&#xff0c;一直想做个总结&#xff0c;但是苦于太贪玩。好吧&#xff0c;借着小组技术交流来一发。这里只对自己新学习的技术或者一些小技巧做简要概述&#xff0c;不做深究…

【ArcGIS微课1000例】0036:分式标注案例教程

【拓展阅读】:【ArcGIS Pro微课1000例】0015:ArcGIS Pro中属性字段分式标注案例教程 文章目录 1. 符号化2. 分式标注1. 符号化 右键数据图层→符号系统,打开符号系统对话框,住符号系统选择【唯一值】,字段1选择NAME。 唯一值标注效果: 2. 分式标注 双击打开图层属性,切…

【转】 ConstraintLayout 完全解析 快来优化你的布局吧

转自&#xff1a; http://blog.csdn.net/lmj623565791/article/details/78011599 本文出自张鸿洋的博客 一、概述 ConstraintLayout出现有一段时间了&#xff0c;不过一直没有特别去关注&#xff0c;也多多少少看了一些文字介绍&#xff0c;多数都是对使用可视化布局拖拽&#…

[转]Docker超详细基础教程,快速入门docker

一、docker概述 1.什么是docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟…

【Zookeeper】源码分析之服务器(一)

一、前言 前面已经介绍了Zookeeper中Leader选举的具体流程&#xff0c;接着来学习Zookeeper中的各种服务器。 二、总体框架图 对于服务器&#xff0c;其框架图如下图所示 说明&#xff1a; ZooKeeperServer&#xff0c;为所有服务器的父类&#xff0c;其请求处理链为PrepReques…

linux下配置samba服务器(以CentOS6.7为例)

一、简介&#xff08;百度百科&#xff09;Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件&#xff0c;由服务器及客户端程序构成。SMB&#xff08;Server Messages Block&#xff0c;信息服务块&#xff09;是一种在局域网上共享文件和打印机的一种通信协议&#xff0c…