从零开始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,但是这种方式对我们来说还是不够灵活. 所以本节我们用完全 ...
随机推荐
- 关于我学git这档子事(2)
将本地main分支push到远程dev分支(不同名分支间的push) 远程dev分支还未创建 (在push同时创建远程dev分支,并将本地main分支内容上传) git push -u --set-u ...
- C#/VB.NET 在PDF表格中添加条形码
条码的应用已深入生活和工作的方方面面.在处理条码时,常需要和各种文档格式相结合.当需要在文档中插入.编辑或者删除条码时,可借助于一些专业的类库工具来实现.本文,以操作PDF文件为例,介绍如何在编辑表格 ...
- Simple, Fast Malicious Multiparty Private Set Intersection-解读
文本记录阅读该论文的笔记. 这是文章框架,来自视频. 介绍 本文主要解决恶意攻击下安全的多方PSI,主要用到两大技术OPPRF和OKVS,构造合谋和不合谋的协议. 基础知识 OPPRF 这部分在OPR ...
- 6000字Locust入门详解
目录 一.Locust 性能测试 (一). 性能测试工具 主流性能测试工具对比 认识Locust (二) locust 基本用法 1.安装locust 2.编写用例 3. 启动测试 GUI 模式启动 ...
- 软件成分分析(SCA)完全指南
上一篇文章中,我们讨论了 DAST 的概念.重要性及其工作原理.那在开发过程中如何查找开源软件包中的漏洞并学习如何修复?本指南带你一起了解 SCA 工具及其最佳实践. 如今,绝大多数代码驱动的应用程序 ...
- 基于web3D展示技术的煤矿巷道3D可视化系统
地下开采离不开巷道工程.煤矿的生产.运输.排水.通风等各个环节都少不了巷道的支持.在煤矿智能化建设被提上日程的今天,巷道工程的智能化.可视化建设也成了行业趋势.尤其是复杂的井下作业环境,人员信息安全问 ...
- QT与DoNet中单例模式的简单实现
由于使用场景的不同,单例模式的写法也有所区别. 目前接触到的,大多数都是多线程,大量数据处理,还要考虑灵活性,对原有类结构改动最小等因素,所以写法更是多种多样. QT个人较常用的一种写法:(两个文件: ...
- idea中enter键不能换行
idea中enter键不能换行 按enter键只能往下移动 如下图 解决办法: 方式一:按住window + Insert 方式二: 按住Fn + Insert 两种方式总有一种可以 之后就可以按en ...
- 使用强大的DBPack处理分布式事务(PHP使用教程)
主流的分布式事务的处理方案 近些年,随着微服务的广泛使用,业务对系统的分布式事务处理能力的要求越来越高. 早期的基于XA协议的二阶段提交方案,将分布式事务的处理放在数据库驱动层,实现了对业务的无侵入, ...
- P2599 [ZJOI2009]取石子游戏 做题感想
题目链接 前言 发现自己三岁时的题目都不会做. 我发现我真的是菜得真实. 正文 神仙构造,分讨题. 不敢说有构造,但是分讨我只服这道题. 看上去像是一个类似 \(Nim\) 游戏的变种,经过不断猜测结 ...