用户编辑和角色编辑几乎一模一样,这里先直接贴代码。

@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)--编辑用户的更多相关文章

  1. 从零开始Blazor Server(10)--编辑角色

    例图 目前的样式是这样的: 其中角色在一个table里,然后可以增删改查,并且可以给指定的用户分配权限. 创建文件 首先我们在Pages/Admin目录下新建一个Role.razor.因为我们的Adm ...

  2. 从零开始Blazor Server(12)--编辑菜单

    上个星期有点事,导致没法及时更新.现在我们继续更我们的从零开始系列. 这个系列也快要结束了,目前规划再有2-3篇,就结束了. 今天我们来说编辑菜单的问题,说实话菜单这种东西,你不更新代码加个页面,单独 ...

  3. 从零开始Blazor Server(1)--项目搭建

    项目介绍 本次项目准备搭建一个使用Furion框架,Blazor的UI使用BootstrapBlazor.数据库ORM使用Freesql的后台管理系统. 目前的规划是实现简单的注册,登录.增加管理员跟 ...

  4. 从零开始Blazor Server(3)--添加cookie授权

    认证方式简述 Blazor Server微软官方还是推荐直接使用Cookie授权,因为本来Blazor Server就是前后端不分离的.不存在Cookie跨域等一系列问题. 只要不是使用SSO之类的统 ...

  5. 从零开始Blazor Server(15)--总结

    我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...

  6. 从零开始Blazor Server(4)--登录系统

    说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...

  7. 从零开始Blazor Server(6)--基于策略的权限验证

    写这个的原因 现在BootstrapBlazor处于大更新时期,Menu组件要改为泛型模式. 本来我们的这一篇应该是把Layout改了,但是改Layout肯定要涉及到菜单,如果现在写了呢,就进入一个发 ...

  8. 从零开始Blazor Server(2)--整合数据库

    开篇 上一篇文章我们留了个尾巴,没有把freesql整合进去,这篇文章我们来整合. 目前的思路呢,是做一个简单的四不像的RABC,也有用户.角色. 权限三部分. 但是其中每个用户只有一个角色,即用户和 ...

  9. 从零开始Blazor Server(5)--权限验证

    序 之前我们一直使用的是微软自带的身份验证方式,即使用[Authorize]标签来做. 但是这种方式十分不灵活,微软推荐的方式是加Policy,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全 ...

随机推荐

  1. 深入浅出Nginx实战与架构

    本文主要内容如下(让读者朋友们深入浅出地理解Nginx,有代码有示例有图): 1.Nginx是什么? 2.Nginx具有哪些功能? 3.Nginx的应用场景有哪些? 4.Nginx的衍生生态有哪些? ...

  2. QC快速充电

    QC快充 一.高通QC快充的介绍 二.识别充电类型的芯片介绍 三.QC充电曲线 四.如何在log中看QC充电类型 五.QC3识别错误 六.波形图 一.高通QC快充的介绍 高通QC快充技术,又称Quic ...

  3. JAVA - 序列化的方式

    JAVA - 序列化的方式 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读 ...

  4. 【生成对抗网络学习 其三】BiGAN论文阅读笔记及其原理理解

    参考资料: 1.https://github.com/dragen1860/TensorFlow-2.x-Tutorials 2.<Adversarial Feature Learning> ...

  5. iPhone x 的区别

    最近入手两台iPhone x, 均从官网购买,两台分别是2017年和2018年生产,对比了一下,两台还有是一些差别: 首先苹果X使用起来还是非常爽的,没有HOME键,明显比按HOME键方便,因为按HO ...

  6. mysql5.7安装要踩的坑

    因为官网下载的是绿色版,所以要做一些配置 1.在mysql根目录新增data文件夹和my.ini文件 my.ini文件内容 [mysql]# 设置mysql客户端默认字符集default-charac ...

  7. JS:in语法

    1.应用于判断对象中是否有某一个成员 var obj = { name: "lili", age:10, gender:"girl" } console.log ...

  8. 关于一次Web线下面试的思考

    前言: 今天面试一家Web前端的公司,由于跟初筛的面试官关系挺好,按理来说我在第一次线上面试就应该被淘汰了(呜呜呜),接下来是线下面试,不出意外的话,我凉了.但是这些天的面试经验并非全无收获.我的线下 ...

  9. Transferable Joint Attribute-Identity Deep Learning for Unsupervised Person Re-Identification理解

    简介:这篇文章属于跨域无监督行人再识别,不同于大部分文章它使用了属性标注.旨在于能够学习到有属性语义与有区分力的身份特征的表达空间(TJ-AIDL),并能够转移到一个没有看到过的域. 贡献: 提出了一 ...

  10. 共享手机中的VXN流量给其他设备使用

    此篇博文讲的什么 不想看废话的,直接看这里就行了: 手机端(IOS,已越狱)装的传统的VXN,没法直接共享流量给其他设备用,可以在手机端开放个socketsserver,我现在用的ssh,它也能提供这 ...