当前位置: 首页 > news >正文

深圳建设网站公司哪家好wordpress屏蔽谷歌蜘蛛

深圳建设网站公司哪家好,wordpress屏蔽谷歌蜘蛛,建设银行官网登录,百度文库个人登录本节我们将开始编写角色相关的接口 一、需求 本节的要做的需求如下#xff1a; 编号需求标题需求内容1增加角色角色名称不能重复2删除角色角色逻辑删除3修改角色修改的名称不能和已有名称重复4查询角色不分页查询#xff0c;根据角色名模糊匹配 二、Role类和Role表 这一…本节我们将开始编写角色相关的接口 一、需求 本节的要做的需求如下 编号需求标题需求内容1增加角色角色名称不能重复2删除角色角色逻辑删除3修改角色修改的名称不能和已有名称重复4查询角色不分页查询根据角色名模糊匹配 二、Role类和Role表 这一小节和创建User类和User表类似这里就不多讲了我把类代码和要在数据库连接上下文 SporeAccountingDBContext 类中加入的代码列出来同学们根据前面学习的内容自行操作这一小节。 新建SysRole 类 using SporeAccounting.BaseModels; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema;namespace SporeAccounting.Models;/// summary /// 角色 /// /summary [Table(name: SysRole)] public class SysRole : BaseModel {/// summary/// 角色名称/// /summary[Column(TypeName nvarchar(20))][Required]public string RoleName { get; set; }/// summary/// 导航属性/// /summarypublic SysUser User { get; set; } }修改SysUser类 using SporeAccounting.BaseModels; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema;namespace SporeAccounting.Models;/// summary /// 用户表自定义属性类 /// /summary [Table(name:SysUser)] public class SysUser:BaseModel {////// Other Code/////// summary/// 导航属性/// /summarypublic ICollectionSysRole Roles { get; set; } }在上面代码中我们增加了两个导航属性这两个导航属性标明了SysRole 类和SysUser它们之间的关系是一对多的关系一个用户创建多个角色。 TIP导航属性的作用和用法请同学们访问专栏《轻松学EntityFramework Core》 中的文章《关系映射》 修改数据库连接上下文SporeAccountingDBContext类 using Microsoft.EntityFrameworkCore; using SporeAccounting.BaseModels; using SporeAccounting.Models; using System.Reflection.Metadata; using System.Security.Cryptography; using System.Text;namespace SporeAccounting;/// summary /// 数据库连接上下文 /// /summary public class SporeAccountingDBContext : DbContext {/// summary/// 用户表/// /summarypublic DbSetSysUser SysUsers { get; set; }/// summary/// 角色表/// /summarypublic DbSetSysRole SysRoles { get; set; }IConfiguration _dbConfig;public SporeAccountingDBContext(IConfiguration dbConfig){_dbConfig dbConfig;}protected override void OnModelCreating(ModelBuilder modelBuilder){////// Other Code////modelBuilder.EntitySysRole().HasData(new ListSysRole(){new SysRole(){RoleName Administrator,CreateUserId adminUserId},new SysRole(){RoleName Consumer,CreateUserId adminUserId}});base.OnModelCreating(modelBuilder);}////// Other Code////private static string HashPasswordWithSalt(string password, string salt){using (var sha256 SHA256.Create()){string saltedPassword password salt;byte[] saltedPasswordBytes Encoding.UTF8.GetBytes(saltedPassword);byte[] hashBytes sha256.ComputeHash(saltedPasswordBytes);return Convert.ToBase64String(hashBytes);}} }|2|删除角色|角色逻辑删除| |3|修改角色|修改的名称不能和已有名称重复| |4|查询角色|不分页查询根据角色名模糊匹配| 三、增加角色 这一小节我们一起来看一下如何实现角色的新增功能。 首先我们来看一下需求角色名称不能重复。从中我们可以推断出代码中需要有一个根据角色名判断角色名是否重复的方法。下面我们就来一起看一下代码。 3.1 ViewModel 定义 第一步我们来创建视图模型SysRoleViewModel它接收来自客户端的数据代码如下 namespace SporeAccounting.Models.ViewModels;/// summary /// 角色视图模型 /// /summary public class SysRoleViewModel {/// summary/// 角色名称/// /summarypublic string RoleName { get; set; } }类比较简单因此我们不再讲解。 3.2 服务开发 我们创建 ISysRoleServer接口和SysRoleImp实现类并增加IsExistByRoleName和Add方法。 //ISysRoleServer 接口 using SporeAccounting.Models;namespace SporeAccounting.Server.Interface; /// summary /// 角色数据库操作接口 /// /summary public interface ISysRoleServer {/// summary/// 新增角色/// /summary/// param namerole/paramvoid Add(SysRole role);/// summary/// 角色是否存在/// /summary/// param nameroleName/param/// returns/returnsbool IsExistByRoleName(string roleName); }//SysRoleImp 实现类 using SporeAccounting.Models; using SporeAccounting.Server.Interface; using System.Data;namespace SporeAccounting.Server;public class SysRoleImp : ISysRoleServer {private SporeAccountingDBContext _dbContext;public SysRoleImp(SporeAccountingDBContext dbContext){_dbContext dbContext;}/// summary/// 新增角色/// /summary/// param namerole/parampublic void Add(SysRole role){try{_dbContext.SysRoles.Add(role);_dbContext.SaveChanges();}catch (Exception ex){throw ex;}}/// summary/// 角色是否存在/// /summary/// param nameroleName/param/// returns/returnspublic bool IsExistByRoleName(string roleName){try{return _dbContext.SysRoles.Any(p p.RoleName roleName !p.IsDeleted);}catch (Exception ex){throw ex;}} }在上面的代码中定义了一个角色管理接口 ISysRoleServer 及其实现类 SysRoleImp用于在数据库中操作角色信息。ISysRoleServer 接口定义了两个方法添加角色方法Add 检查是否存在指定名称的角色的方法IsExistByRoleName。而SysRoleImp 类则实现了 ISysRoleServer 接口。 3.3 Controller 开发 Controller 代码的编写和前面几篇文章讲解的类似在这里就不多讲解了代码如下 using System.Data; using System.Net; using AutoMapper; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SporeAccounting.BaseModels; using SporeAccounting.Models; using SporeAccounting.Models.ViewModels; using SporeAccounting.Server.Interface;namespace SporeAccounting.Controllers {/// summary/// 角色接口/// /summary[Route(api/[controller]/)][ApiController]public class SysRoleController : ControllerBase{private readonly ISysRoleServer _sysRoleServer;private readonly IMapper _mapper;public SysRoleController(ISysRoleServer sysRoleServer, IMapper mapper){_sysRoleServer sysRoleServer;_mapper mapper;}/// summary/// 新增角色/// /summary/// param namerole/param/// returns/returns[HttpPost][Route(Add)]public ActionResultResponseDatabool Add([FromBody] SysRoleViewModel role){try{bool isExist _sysRoleServer.IsExistByRoleName(role.RoleName);if (isExist){return Ok(new ResponseDatabool(HttpStatusCode.Conflict, $角色{role.RoleName}已存在, false));}SysRole dbRole _mapper.MapSysRole(role);//TODO这里暂时写死等权限和授权完成后再改为动态获取dbRole.CreateUserId 08f35c1e-117f-431d-979d-9e51e29b0b7d;_sysRoleServer.Add(dbRole);return Ok(new ResponseDatabool(HttpStatusCode.OK, data: true));}catch (Exception e){return Ok(new ResponseDatabool(HttpStatusCode.InternalServerError, 服务器异常, false));}}} } 这段代码中实现了新增角色接口 Add 它是一个只接受POST请求的方法路由地址为 api/SysRole/Add参数是来自Body 的SysRoleViewModel类型的参数。Add接口首先使用我们在上一小节中定义并实现的 IsExistByRoleName 方法来检查数据库中是否已存在同名角色如果角色存在返回 409 状态码并提示角色名称已存在否则利用 AutoMapper 将SysRoleViewModel 映射为数据库实体 SysRole。这里我们通过硬编码设置了 CreateUserId未来会替换为动态获取用户信息最后我们调用 Add 方法将角色添加到数据库中并返回 200 状态码。 3.4 Profile 在 SporeAccountingProfile 中加入如下代码 CreateMapSysRoleViewModel, SysRole().ForMember(d d.RoleName, opt opt.MapFrom(s s.RoleName));四、删除角色 删除角色在某些情况下是必要的下面我们就来实现这个功能。 4.1 服务开发 我们首先在ISysRoleServer接口和SysRoleImp类中增加Delete方法和IsExistById。 //ISysRoleServer 接口 /// summary /// 删除角色逻辑 /// /summary /// param nameroleId/param /// param nameuserId/param void Delete(string roleId, string userId); /// summary /// 角色是否存在 /// /summary /// param nameroleId/param /// returns/returns bool IsExistById(string roleId);//SysRoleImp 类 /// summary /// 删除角色逻辑 /// /summary /// param nameroleId/param /// param nameuserId/param public void Delete(string roleId, string userId) {try{SysRole role _dbContext.SysRoles.FirstOrDefault(p p.Id roleId)!;role.IsDeleted true;role.DeleteDateTime DateTime.Now;role.DeleteUserId userId;_dbContext.SysRoles.Update(role);_dbContext.SaveChanges();}catch (Exception ex){throw ex;} } /// summary /// 角色是否存在 /// /summary /// param nameroleId/param /// returns/returns public bool IsExistById(string roleId) {try{return _dbContext.SysRoles.Any(p p.Id roleId !p.IsDeleted);}catch (Exception ex){throw ex;} }代码和User的删除代码类似这里我们就不讲解了需要注意的是这里我们的删除操作是逻辑删除而不是物理删除。在实现IsExistById方法时一定要注意加上!p.IsDeleted这个过滤条件 Tip从这篇文章开始我们项目中简单的代码以及和已有代码类似的代码将不再详细讲解只列出代码。我们只针对详复杂的业务代码以及架构代码进行讲解。 4.2 Controller 开发 我们在 SysRoleController 中添加Remove方法并实现删除功能代码如下 /// summary /// 删除角色逻辑删除 /// /summary /// param nameroleId/param /// returns/returns [HttpDelete] [Route(Remove/{roleId})] public ActionResultResponseDatabool Remove([FromQuery] string roleId) {try{bool isExist _sysRoleServer.IsExistById(roleId);if (!isExist){return Ok(new ResponseDatabool(HttpStatusCode.Conflict, $角色不存在, false));}//TODO这里暂时写死等权限和授权完成后再改为动态获取_sysRoleServer.Delete(roleId, 08f35c1e-117f-431d-979d-9e51e29b0b7d);return Ok(new ResponseDatabool(HttpStatusCode.OK, data: true));}catch (Exception e){return Ok(new ResponseDatabool(HttpStatusCode.InternalServerError, 服务器异常, false));} }代码中需要注意的是在删除前我们需要查询一次角色是否存在 Tip这一小节我们暂时不去考虑删除角色后绑定了该角色的用户该如何处理。这个问题我们将会在下一篇文章《补充单元测试》中处理。 五、修改角色 修改角色我们修改的时角色的名称这一小节我们来看一下实现。 5.1 ViewModel 新建SysRoleEditViewModel视图类类中的内容如下 using System.ComponentModel.DataAnnotations;namespace SporeAccounting.Models.ViewModels; /// summary /// 修改角色视图类 /// /summary public class SysRoleEditViewModel {/// summary/// 角色id/// /summary[Required(ErrorMessage 角色Id不能为空)]public string RoleId { get; set; }/// summary/// 角色名称/// /summary[Required(ErrorMessage 角色名称不能为空)]public string RoleName { get; set; } }5.2 服务开发 和前面类似我们在ISysRoleServer接口和SysRoleImp类中增加Update方法和IsRepeat方法其中IsRepeat方法用来验证新的角色名称是否重复。实现如下 //ISysRoleServer 接口 /// summary /// 修改角色 /// /summary /// param namerole/param void Update(SysRole role); /// summary /// 角色是否重复 /// /summary /// param nameroleId/param /// param nameroleName/param /// returns/returns bool IsRepeat(string roleId, string roleName);//SysRoleImp 方法 /// summary /// 修改角色 /// /summary /// param namerole/param public void Update(SysRole role) {try{SysRole dbRole _dbContext.SysRoles.FirstOrDefault(p p.Id role.Id)!;dbRole.RoleName role.RoleName;dbRole.UpdateDateTime DateTime.Now;_dbContext.SysRoles.Update(role);_dbContext.SaveChanges();}catch (Exception ex){throw ex;} } /// summary /// 角色是否重复 /// /summary /// param nameroleId/param /// param nameroleName/param /// returns/returns public bool IsRepeat(string roleId, string roleName) {try{return _dbContext.SysRoles.Any(p p.Id ! roleId p.RoleName roleName !p.IsDeleted);}catch (Exception ex){throw ex;} } 这里需要注意IsRepeat方法传入角色Id的目的是在判断角色名是否重复时屏蔽当前要修改的角色这是因为如果不屏蔽当前角色的话在不修改角色直接保存的情况下会出现提示角色重复的情况。 5.3 Controller 开发 在 SysRoleController 中添加Edit方法代码如下 /// summary /// 修改角色 /// /summary /// param nameroleView/param /// returns/returns [HttpPut] [Route(Edit)] public ActionResultResponseDatabool Edit([FromBody] SysRoleEditViewModel roleView) {try{//判断角色是否存在bool isExist _sysRoleServer.IsExistById(roleView.RoleId);if (!isExist){return Ok(new ResponseDatabool(HttpStatusCode.Conflict, $角色不存在, false));}//判断角色名字是否重复isExist _sysRoleServer.IsRepeat(roleView.RoleId, roleView.RoleName);if (isExist){return Ok(new ResponseDatabool(HttpStatusCode.Conflict, $角色{roleView.RoleName}已存在, false));}SysRole role _mapper.MapSysRole(roleView);//TODO这里暂时写死等权限和授权完成后再改为动态获取role.UpdateUserId 08f35c1e-117f-431d-979d-9e51e29b0b7d;_sysRoleServer.Update(role);return Ok(new ResponseDatabool(HttpStatusCode.OK, data: true));}catch (Exception e){return Ok(new ResponseDatabool(HttpStatusCode.InternalServerError, 服务器异常, false));} }5.4 Profile 在 SporeAccountingProfile 中加入如下代码 CreateMapSysRoleEditViewModel, SysRole().ForMember(d d.RoleName, opt opt.MapFrom(s s.RoleName));六、查询角色 查询角色是最后一个功能一起来看一下实现代码。 6.1 ViewModel 新建SysRoleQueryViewModel类并写入如下代码 namespace SporeAccounting.Models.ViewModels;public class SysRoleQueryViewModel {/// summary/// 角色id/// /summarypublic string RoleId { get; set; }/// summary/// 角色名/// /summarypublic string RoleName { get; set; } }6.2 服务开发 在ISysRoleServer接口和SysRoleImp类中增加Query方法 //ISysRoleServer 接口 /// summary /// 查询角色 /// /summary /// param nameroleName/param ListSysRole Query(string roleName);//SysRoleImp 方法 /// summary /// 查询角色 /// /summary /// param nameroleName/param public ListSysRole Query(string roleName) {try{ListSysRole sysRoles _dbContext.SysRoles.Where(p p.RoleName.Contains(roleName)).ToList();return sysRoles;}catch (Exception ex){throw ex;} }在Query 方法中我们并没有使用 来查询角色而是使用 Contains 方法。这是因为客户端传递过来的角色名称有很大的可能性不是完整的角色名。 6.3 Controller 开发 最后在SysRoleController 中实现Query 方法 /// summary /// 根据角色名查询 /// /summary /// param nameroleName/param /// returns/returns [HttpGet] [Route(Query/{roleName})] public ActionResultResponseDataListSysRoleQueryViewModel Query([FromQuery] string roleName) {try{ListSysRole roles _sysRoleServer.Query(roleName);ListSysRoleQueryViewModel rolesQuery _mapper.MapListSysRoleQueryViewModel(roles);return Ok(new ResponseDataListSysRoleQueryViewModel(HttpStatusCode.OK, data: rolesQuery));}catch (Exception e){return Ok(new ResponseDatabool(HttpStatusCode.InternalServerError, 服务器异常, false));} }6.4 Profile 在 SporeAccountingProfile 中加入如下代码 CreateMapSysRole, SysRoleQueryViewModel().ForMember(d d.RoleName, opt opt.MapFrom(s s.RoleName));七、总结 这篇文章我们一起实现了角色的增删改查功能并对主要代码进行了讲解。
http://www.hkea.cn/news/14558330/

相关文章:

  • 广元建设网站个人网站设计策划
  • 国际网站怎么开通没钱可以开网店吗
  • 个旧市做网站公司网站开发过程说明怎么写
  • 做网站的需要考什么证书吗网站弹窗公告代码
  • 寺庙招人做网站维护吗宝安石岩网站建设
  • 网站的建站标准生成论坛网站
  • 网站域名使用方法做网站线稿软件有哪些
  • 工作室网站源码jquery特效网站
  • 济南网站建设 首选搜点网络常州网站建设推广
  • 彩票网站开发租用驻马店手机网站制作
  • 集美那里有教网站建设wordpress设置文件
  • 备案的时候网站名称中咨工程咨询有限公司
  • 上海远程教育网站设计与开发公司iis 建设网站
  • 规划和布局营销型网站的四大重点凡科邮箱登录
  • 神华集团两学一做登陆网站如何提高关键词搜索排名
  • 深圳seo网站优化公司广东省农业农村厅网站
  • 深圳网站建设技术seo网站结构优化
  • 贵阳网站建设开发菏泽网站建设价位
  • 网站排名下降原因平面设计师常用的网站
  • 南充手机网站建设宝安中心医院入职体检
  • 网站与网页设计教程网站导航条制作
  • 廊坊企业建站模板杭州外贸网站多少钱
  • 网站开发的发展趋势wordpress更改首页模板
  • dede网站改成自适应typecho同步到wordpress
  • 漳州专业网站建设公司房屋装修效果图怎么制作
  • it运维工资深圳龙岗区优化防控措施
  • 百度的官方网站网页设计板式类型
  • 百度 网站地图怎么做网站怎么做成app
  • 网站页面怎么算做外贸 访问国外网站 怎么办
  • 备案号怎么添加到网站电子商务主要是什么