从零开始Blazor Server(8)--增加菜单以及调整位置
这篇干啥
这篇文章主要是把前面的一些东西稍微调整一下,使其更适合后面的内容。
主要是两个事,一个是把原来的PermissionEntity直接变成MenuEntity,直接让最后一级是菜单,这样后面就简单很多。
另外增加一些默认的菜单为后面的文章做准备。
另外就是调整一下Pages里面的目录结构,让我们不用每个页面都去加@attribute [Authorize]
处理目录结构
之前的内容里,我们最后还是用了Furion自带的方法来处理成策略授权了,所以我们正常的话需要每个页面都加上@attribute [Authorize]。
但是这样太麻烦了,幸好微软给我们提供了一个_Imports.razor的东西,这个文件是目录级的,我们可以在某层目录下添加,然后此目录和它的子目录都会受影响。
所以我们就需要把Login和其他的页面分开,因为我们的Login页面是不需要登录的,而且分开以后更清晰。
这里在Pages下面新建两个目录,一个叫Account,一个叫Admin。这里把Login.razor放到Account目录下,把其他的razor文件都放到Admin下面。
这里注意不要移动那两个
cshtml文件,因为那两个文件的位置如果改变还需要改变很多其他的东西。
然后在Admin目录下新建一个_Imports.razor,内容为:
@attribute [Authorize]
这样,所有的Admin目录下的页面都会受到影响,需要权限验证。
修改MenuEntity
在之前,我们是做了个PermissionEntity,里面只记录了权限信息,但是这样就还需要一套菜单系统,然后还要根据Url来进行匹配,就太麻烦了一点,所以这里我们直接把菜单系统和权限系统合起来,把PermissionEntity改为MenuEntity,并且增加Icon、ParentId用于菜单使用。
修改后的MenuEntity如下:
[Description("菜单表")]
public class MenuEntity: BaseEntity<MenuEntity, int>
{
[Description("菜单名")]
public string? Name { get; set; }
[Description("菜单图标")]
public string? Icon { get; set; }
[Description("对应页面Url")]
public string? Url { get; set; }
[Description("父菜单ID")]
public int ParentId { get; set; }
[Navigate(nameof(ParentId))]
public MenuEntity? Parent { get; set; }
[Navigate(nameof(ParentId))]
public List<MenuEntity>? Children { get; set; }
[Description("角色")]
[Navigate(ManyToMany = typeof(RoleMenuEntity))]
public virtual ICollection<RoleEntity>? Roles { get; set; }
}
同时我们增加一部分菜单项到DbExtension,这块代码就不贴了,直接去github看把。
源码在github:https://github.com/j4587698/BlazorLearn,分支lesson8。
从零开始Blazor Server(8)--增加菜单以及调整位置的更多相关文章
- 从零开始Blazor Server(12)--编辑菜单
上个星期有点事,导致没法及时更新.现在我们继续更我们的从零开始系列. 这个系列也快要结束了,目前规划再有2-3篇,就结束了. 今天我们来说编辑菜单的问题,说实话菜单这种东西,你不更新代码加个页面,单独 ...
- 从零开始Blazor Server(3)--添加cookie授权
认证方式简述 Blazor Server微软官方还是推荐直接使用Cookie授权,因为本来Blazor Server就是前后端不分离的.不存在Cookie跨域等一系列问题. 只要不是使用SSO之类的统 ...
- 从零开始Blazor Server(1)--项目搭建
项目介绍 本次项目准备搭建一个使用Furion框架,Blazor的UI使用BootstrapBlazor.数据库ORM使用Freesql的后台管理系统. 目前的规划是实现简单的注册,登录.增加管理员跟 ...
- 从零开始Blazor Server(15)--总结
我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...
- 从零开始Blazor Server(6)--基于策略的权限验证
写这个的原因 现在BootstrapBlazor处于大更新时期,Menu组件要改为泛型模式. 本来我们的这一篇应该是把Layout改了,但是改Layout肯定要涉及到菜单,如果现在写了呢,就进入一个发 ...
- 从零开始Blazor Server(14)--修改密码
目前,我们只做了在用户管理里强行修改密码,而没有做用户自行修改密码的功能,今天我们来实现它. 首先,我们的用户密码修改最好的位置应该就是在头像下面的下拉菜单里,所以我们在那里的LinkTemplate ...
- 从零开始Blazor Server(4)--登录系统
说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...
- 从零开始Blazor Server(5)--权限验证
序 之前我们一直使用的是微软自带的身份验证方式,即使用[Authorize]标签来做. 但是这种方式十分不灵活,微软推荐的方式是加Policy,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全 ...
- 从零开始Blazor Server(7)--使用Furion权限验证
序 上面两篇我们讲了怎么用OnNavigateAsync来验证权限,又写了怎么用策略来验证权限. 其实我们既然集成了Fution,就可以用Furion带的方式来验证. 创建AdminHandler 我 ...
随机推荐
- 九种常见UML图(分类+图解)
九种常见UML图 1.类图 概述 类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础. 类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静 ...
- 虚拟机:ESX
VMware ESXi 与ESX 产品之比较 VMware vSphere 5.0 以后版本,所有底层虚拟化产品都改为ESXi产品,本文主要比较了ESXi与ESX的各自特点,以便对大家是否要把现有 ...
- JS倒计时(刷新页面不影响)的实现思路
最近在做一个项目,用到了点击按钮实现倒计时,这个用js来实现很简单.但是遇到了一个问题 页面刷新后js重新加载导致 倒计时重新开始,或者直接初始化了 后来通过 cookie 保存来实现了js倒计时,关 ...
- 类型转换——JavaSE基础
类型转换 类型判断 可以通过Instanceof关键字判断左操作数是否是右操作数的父类或本身 强制类型转换 不能对布尔值进行转换 不能将对象类型转换为不相关的类型 把高容量转向低容量时,需要进行强制类 ...
- 《C Primer Plus》第六版笔记--4~6章
目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...
- CabloyJS自带工作流引擎的文档清单
文档清单 CabloyJS自带工作流引擎文档已经整理出来,欢迎大家围观.拍砖 介绍 介绍 演示:CMS审批工作流 单元测试用例集 流程定义 基本概念 JSON规范 listener规范 listene ...
- GDKOI 2021 Day2 PJ 去世记
比赛时和昨天一样困,后面的大奆打代码的速度简直了 T1 用 2.4.6.8 来与 5 抵消掉末尾的 0 ,然后用周期问题的方法直接乘起来并取个位 #include<bits/stdc++.h&g ...
- 获得MySQL数据库存放位置
更新记录 2022年6月13日 发布. 2022年6月11日 开始. 通过查看MySQL与存储目录相关的参数 show variables like '%dir%'; 通过查询后datadir参数的值 ...
- 『忘了再学』Shell流程控制 — 34、if条件判断语句(二)
目录 1.多分支if条件语句格式 2.练习 3.说明 4.综合练习 1.多分支if条件语句格式 if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] ...
- Mybatis架构原理(二)-二级缓存源码剖析
Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...