开篇 上一篇文章我们留了个尾巴,没有把freesql整合进去,这篇文章我们来整合. 目前的思路呢,是做一个简单的四不像的RABC,也有用户.角色. 权限三部分. 但是其中每个用户只有一个角色,即用户和角色之间是一多关系.每个角色可以有多个权限,即权限跟角色之间是多多关系. 这样主要是想说一下freesql怎么做一多和多多关系.一个正常的RABC用户和角色之间也应该是多多,并且用户可能跟权限也可以有直接的联系.但是这个是一样的,只要权限列表拿到了,后面就随便怎么处理了. 建表 这次我们只建立四个表…
项目介绍 本次项目准备搭建一个使用Furion框架,Blazor的UI使用BootstrapBlazor.数据库ORM使用Freesql的后台管理系统. 目前的规划是实现简单的注册,登录.增加管理员跟普通用户两种权限,不会实现复杂的权限管理,但是也不准备用默认的那套,自己实现一个简单的架子把. 然后实现一下后台对用户的删除,禁用. 大概就这个逻辑,后面想写别的再说. 创建项目 创建项目我们不使用任何模板,直接建立官方模板的blazor项目来做,这样应该是最通用的. 首先我们建立一个Blazor…
我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大量的用了同步,即使使用Task.FormResult也不用异步处理,再比如整个项目里没有任何缓存,所有的操作都直接处理数据库,再再比如半残废的权限系统. 所以这套东西我不希望有人真的直接拿过来用,正如我们题目说的那样,是从零开始blazor,不是从零开始后台管理系统. 这套文章的着眼点在于UI部分.…
认证方式简述 Blazor Server微软官方还是推荐直接使用Cookie授权,因为本来Blazor Server就是前后端不分离的.不存在Cookie跨域等一系列问题. 只要不是使用SSO之类的统一登录方式,建议直接使用Cookie作为认证方式就行,简单方便. 添加Cookie认证 Blazor添加Cookie认证的方式跟MVC没什么区别,也是在Program.cs里添加对应的认证中间件. 添加Cookie认证方式 builder.Services.AddAuthentication(Coo…
说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样.有个小区别是必须使用MVC去登录,Blazor本身是登录不了的. 添加Controller支持 在Program.cs中添加: builder.Services.AddControllers().AddInject(); 这里的.AddInject()是添加Furion的支持,我们后面要用到的动态C…
序 之前我们一直使用的是微软自带的身份验证方式,即使用[Authorize]标签来做. 但是这种方式十分不灵活,微软推荐的方式是加Policy,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全自己校验的方式完成权限验证. OnNavigateAsync介绍 在 App.razor 里面的Router节点,微软给了一个OnNavigateAsync方法,这个方法在每次路由跳转的时候都会执行,所以我们可以把我们的权限验证搬到这里来. App.razor 首先,我们在Router节点上增加On…
写这个的原因 现在BootstrapBlazor处于大更新时期,Menu组件要改为泛型模式. 本来我们的这一篇应该是把Layout改了,但是改Layout肯定要涉及到菜单,如果现在写了呢,就进入一个发布就过时的状态,就很尴尬,所以后面的就稍微拖一拖. 加上昨天有人说我用OnNavigateAsync违反单一性原则,要用策略,所以这里我们说下策略怎么做. 添加策略相关的代码 首先我们要有一个实现IAuthorizationRequirement接口的类,这个类没有什么特别的要求,我们就写一个空类来…
上个星期有点事,导致没法及时更新.现在我们继续更我们的从零开始系列. 这个系列也快要结束了,目前规划再有2-3篇,就结束了. 今天我们来说编辑菜单的问题,说实话菜单这种东西,你不更新代码加个页面,单独加个菜单没啥意义.除非你要跳转到其他的网站去. 但是呢,你没有这玩意感觉又不太完整,就加上吧. 菜单管理里,我们主要来说一下table的树形的处理. 先上代码: <Table TItem="MenuEntity" IsBordered="true" ShowAdd…
序 上面两篇我们讲了怎么用OnNavigateAsync来验证权限,又写了怎么用策略来验证权限. 其实我们既然集成了Fution,就可以用Furion带的方式来验证. 创建AdminHandler 我们还是去创建AdminHandler,但是跟策略不一样的是我们的Handler不继承于AuthorizationHandler,而是继承Furion的AppAuthorizeHandler. public class AdminHandler : AppAuthorizeHandler AppAut…
这篇干啥 这篇文章主要是把前面的一些东西稍微调整一下,使其更适合后面的内容. 主要是两个事,一个是把原来的PermissionEntity直接变成MenuEntity,直接让最后一级是菜单,这样后面就简单很多. 另外增加一些默认的菜单为后面的文章做准备. 另外就是调整一下Pages里面的目录结构,让我们不用每个页面都去加@attribute [Authorize] 处理目录结构 之前的内容里,我们最后还是用了Furion自带的方法来处理成策略授权了,所以我们正常的话需要每个页面都加上@attri…