从零开始Blazor Server(11)--编辑用户
用户编辑和角色编辑几乎一模一样,这里先直接贴代码。
@page "/user"
@using BlazorLearn.Entity
@using Furion.DataEncryption
<Table TItem="UserEntity" IsBordered="true" ShowAddButton="true" ShowToolbar="true"
ShowExtendButtons="true" ShowEditButtonCallback="entity => entity.Id != 1" ShowDeleteButtonCallback="entity => entity.Id != 1"
OnQueryAsync="OnQueryAsync" OnSaveAsync="OnSaveAsync">
<TableColumns>
<TableColumn @bind-Field="@context.UserName"></TableColumn>
<TableColumn @bind-Field="@context.Name"></TableColumn>
<TableColumn @bind-Field="@context.RoleId" Lookup="Roles"></TableColumn>
</TableColumns>
<RowButtonTemplate>
<TableCellButton Color="Color.Success" Icon="fa fa-edit" Text="重置密码" OnClickWithoutRender="() => ShowModal(context)"></TableCellButton>
</RowButtonTemplate>
</Table>
<Modal @ref="PasswordModal">
<ModalDialog Title="重置密码">
<BodyTemplate>
<BootstrapInput @bind-Value="SelectedUser.Password" DisplayText="请输入新密码"></BootstrapInput>
</BodyTemplate>
<FooterTemplate>
<Button OnClick="ResetPassword">重置密码</Button>
</FooterTemplate>
</ModalDialog>
</Modal>
@code {
private List<SelectedItem>? Roles { get; set; }
private Modal? PasswordModal { get; set; }
private UserEntity? SelectedUser { get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
SelectedUser = new UserEntity();
Roles = RoleEntity.Select.ToList().Select(x => new SelectedItem(x.Id.ToString(), x.Name!)).ToList();
}
private Task<QueryData<UserEntity>> OnQueryAsync(QueryPageOptions arg)
{
var users = UserEntity.Select.Count(out var count)
.Page(arg.PageIndex, arg.PageItems).ToList();
return Task.FromResult(new QueryData<UserEntity>()
{
Items = users,
TotalCount = (int)count
});
}
private Task<bool> OnSaveAsync(UserEntity arg1, ItemChangedType arg2)
{
if (arg2 == ItemChangedType.Add)
{
arg1.Password = MD5Encryption.Encrypt(arg1.UserName);
}
arg1.Save();
return Task.FromResult<bool>(true);
}
private void ResetPassword()
{
SelectedUser.Password = MD5Encryption.Encrypt(SelectedUser.Password);
SelectedUser?.Save();
PasswordModal?.Toggle();
}
private Task ShowModal(UserEntity userEntity)
{
SelectedUser = userEntity;
SelectedUser.Password = "";
PasswordModal?.Toggle();
StateHasChanged();
return Task.CompletedTask;
}
}
这里解释几个地方。
一个是Lookup,这个东西还是很好用的,可以直接使用SelectedItem把Id类的东西直接转成名字,同时修改新增等等功能也会一同使用。
这里我们直接在初始化的时候拿出所有的角色转换成SelectedItem
private List<SelectedItem>? Roles { get; set; }
Roles = RoleEntity.Select.ToList().Select(x => new SelectedItem(x.Id.ToString(), x.Name!)).ToList();
然后我们只需要将User绑定的RoleId列的Lookup指向Roles就行了。
<TableColumn @bind-Field="@context.RoleId" Lookup="Roles"></TableColumn>
另一个就是修改密码的时候我偷懒了,不应该直接把整个UserEntity拿过来去掉密码字段。这里应该单独拿出密码来处理完再Update进去更好,不过例子嘛,这样写也行。
第三个就是我这里在添加新用户的时候默认使用了用户名相同的密码,这个要根据安全需求来,并且第一次是否需要改密码之类的可以都在这里处理。
代码在github:https://github.com/j4587698/BlazorLearn,分支lesson11。
从零开始Blazor Server(11)--编辑用户的更多相关文章
- 从零开始Blazor Server(10)--编辑角色
例图 目前的样式是这样的: 其中角色在一个table里,然后可以增删改查,并且可以给指定的用户分配权限. 创建文件 首先我们在Pages/Admin目录下新建一个Role.razor.因为我们的Adm ...
- 从零开始Blazor Server(12)--编辑菜单
上个星期有点事,导致没法及时更新.现在我们继续更我们的从零开始系列. 这个系列也快要结束了,目前规划再有2-3篇,就结束了. 今天我们来说编辑菜单的问题,说实话菜单这种东西,你不更新代码加个页面,单独 ...
- 从零开始Blazor Server(1)--项目搭建
项目介绍 本次项目准备搭建一个使用Furion框架,Blazor的UI使用BootstrapBlazor.数据库ORM使用Freesql的后台管理系统. 目前的规划是实现简单的注册,登录.增加管理员跟 ...
- 从零开始Blazor Server(3)--添加cookie授权
认证方式简述 Blazor Server微软官方还是推荐直接使用Cookie授权,因为本来Blazor Server就是前后端不分离的.不存在Cookie跨域等一系列问题. 只要不是使用SSO之类的统 ...
- 从零开始Blazor Server(15)--总结
我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...
- 从零开始Blazor Server(4)--登录系统
说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...
- 从零开始Blazor Server(6)--基于策略的权限验证
写这个的原因 现在BootstrapBlazor处于大更新时期,Menu组件要改为泛型模式. 本来我们的这一篇应该是把Layout改了,但是改Layout肯定要涉及到菜单,如果现在写了呢,就进入一个发 ...
- 从零开始Blazor Server(2)--整合数据库
开篇 上一篇文章我们留了个尾巴,没有把freesql整合进去,这篇文章我们来整合. 目前的思路呢,是做一个简单的四不像的RABC,也有用户.角色. 权限三部分. 但是其中每个用户只有一个角色,即用户和 ...
- 从零开始Blazor Server(5)--权限验证
序 之前我们一直使用的是微软自带的身份验证方式,即使用[Authorize]标签来做. 但是这种方式十分不灵活,微软推荐的方式是加Policy,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全 ...
随机推荐
- 前端CSS3动画animation用法
前端CSS3动画animation用法 学习如下动画属性 @keyframes animation-name animation-duration animation-delay animation- ...
- c++ 乘法逆元
主要参考:OI-WIKI 为什么要逆元 当一个题目让你求方案数时常要取余,虽然 \((a+b)\% p=(a\% p+b\% p)\%p\) \((a-b)\% p=(a\% p-b\% p)\%p\ ...
- 部署ASP.NET Core最简单的办法,使用IIS部署ASP.NET Core应用
本文迁移自Panda666原博客,原发布时间:2021年3月28日.写原文的时候.NET的最新版本是5.0,现在7的preview出来了,时间真快啊.抽空再写个在Windows Server Core ...
- redis主从复制(九)
先来简单了解下redis中提供的集群策略, 虽然redis有持久化功能能够保障redis服务器宕机也能恢复并且只有少量的数据损失,但是由于所有数据在一台服务器上,如果这台服务器出现硬盘故障,那就算是有 ...
- 记住这几个git命令就够了
git clone: 下载初始化git add:添加git commit -m ' ' :提交 带消息git push:推送git pull: 拉取 git config --global user. ...
- QT多线程的简单使用,主线程发一份数据,子线程收两份数据
先看效果图,示例发送数据"Hello World" 主线程:0x16f54aeda20,另两个子线程分别是0x4f1baff690.0x4f1baff6a0 因为在子线程中加了20 ...
- Spring框架系列(9) - Spring AOP实现原理详解之AOP切面的实现
前文,我们分析了Spring IOC的初始化过程和Bean的生命周期等,而Spring AOP也是基于IOC的Bean加载来实现的.本文主要介绍Spring AOP原理解析的切面实现过程(将切面类的所 ...
- exe4j下载和使用
https://blog.csdn.net/weixin_44678104/article/details/101015065
- Mybatis-Plus介绍
Mybatis-Plus介绍 Mybatis-Plus概念 Mybatis-Plus介绍 官网https://mybatis-plus/或https://mp.baomidou.com/ mybati ...
- 一张图进阶 RocketMQ - 消息发送
前 言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片链接,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦. [重要]视频在 B 站同步更新,欢 ...