欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--接口路径管理

【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--接口路径管理

2024/11/7 10:53:13 来源:https://blog.csdn.net/gangzhucoll/article/details/143463226  浏览:    关键词:【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--接口路径管理

从这篇文章开始,我们将为孢子记账增加简易的权限系统,它包含接口路径管理、角色可访问接口管理、访问权限中间件。在本篇文章中我们先实现接口路径管理相关的接口。

一、需求

接口路径管理比较简单,需求和前面的 用户 以及 **角色**的需求类似,实现起来很简单。我们先来看一下需求

编号功能描述
1新增接口URLURL不能重复
2删除接口URL管理端相关的接口URL不能删除,其他的接口可以删除
2修改接口URL修改后的URL不能和现有的URL重复
3删除URL逻辑删除URL

由于接口比较简单,并且需求也很明确,我们只讲解部分代码,其他代码大家可以自己手动编写代码后对比GitHub上的代码。

二、编写代码

2.1 编写数据库映射类
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using SporeAccounting.BaseModels;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;namespace SporeAccounting.Models;/// <summary>
/// 接口URL表
/// </summary>
[Table("SysUrl")]
public class SysUrl : BaseModel
{/// <summary>/// 接口URL/// </summary>[Column(TypeName="nvarchar(200)")][Required]public string Url { get; set; }/// <summary>/// URL描述/// </summary>[Column(TypeName="nvarchar(200)")]public string Description { get; set; }/// <summary>/// 是否可以删除/// </summary>[Column(TypeName = "nvarchar(200)")][Required]public bool CanDelete { get; set; } = true;
}

SporeAccountingDBContext增加如下代码:

/// <summary>
/// 接口URL表
/// </summary>
public DbSet<SysUrl> SysUrls { get; set; }

编写完数据库映射类后我们执行数据库迁移命令即可。

2.2 编写业务逻辑

我们以新增URL为例,剩余三个需求的代码我希望大家能根据需求自己来写出相关代码。

  1. 新建服务接口ISysUrlServer及其实现类SysUrlImp
  2. 在接口及其实现类中增加Add方法
    //ISysUrlServer接口
    /// <summary>
    /// 新增URL
    /// </summary>
    /// <param name="sysUrl"></param>
    void Add(SysUrl sysUrl);//SysUrlImp实现类
    /// <summary>
    /// 新增URL
    /// </summary>
    /// <param name="sysUrl"></param>
    public void Add(SysUrl sysUrl)
    {try{_dbContext.SysUrls.Add(sysUrl);_dbContext.SaveChanges();}catch (Exception e){throw;}
    }
    
    代码比较简单,不与讲解。
  3. 新建SysUrlController,并实现```Add``方法
    using AutoMapper;
    using Microsoft.AspNetCore.Mvc;
    using SporeAccounting.BaseModels;
    using SporeAccounting.Models;
    using SporeAccounting.Models.ViewModels;
    using SporeAccounting.Server.Interface;
    using System.Net;namespace SporeAccounting.Controllers
    {[Route("api/[controller]")][ApiController]public class SysUrlController : ControllerBase{private readonly ISysUrlServer _sysUrlServer;private readonly IMapper _mapper;public SysUrlController(ISysUrlServer sysUrlServer, IMapper mapper){_sysUrlServer = sysUrlServer;_mapper = mapper;}[HttpPost][Route("Add")]public ActionResult<ResponseData<bool>> Add([FromBody] SysUrlViewModel sysUrlViewModel){try{bool isExist = _sysUrlServer.IsExist(sysUrlViewModel.Url);if (isExist){return Ok(new ResponseData<bool>(HttpStatusCode.BadRequest, $"URL{sysUrlViewModel.Url}已存在"));}SysUrl sysUrl = _mapper.Map<SysUrl>(sysUrlViewModel);sysUrl.CreateDateTime = DateTime.Now;//TODO:这里暂时写死,等权限和授权完成后再改为动态获取sysUrl.CreateUserId = "08f35c1e-117f-431d-979d-9e51e29b0b7d";_sysUrlServer.Add(sysUrl);return Ok(new ResponseData<bool>(HttpStatusCode.OK,data:true));}catch (Exception e){return Ok(new ResponseData<bool>(HttpStatusCode.InternalServerError, "服务器异常"));}}}
    }
    
    需求中要求URL不能重复,因此我们在Add方法中调用了IsExist方法,如果传入的Url存在则向客户端提示已存在。
  4. 在接口及其实现类中增加IsExist方法
    //ISysUrlServer接口
    /// <summary>
    /// URL是否存在
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    bool IsExist(string url);//SysUrlImp实现类
    /// <summary>
    /// URL是否存在
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public bool IsExist(string url)
    {try{return _dbContext.SysUrls.Any(x => x.Url == url);}catch (Exception e){throw;}
    }
    

得到目前为止,新增接口URL的需求已经完成。

三、总结

这篇文章主要讲解了接口路径管理的开发,功能比较简单。从这篇文章开始,我们将引导大家自主编写代码,我只提供其中一个需求的代码,但是对于逻辑复杂的代码,我会带领大家一步一步的来实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com