从这篇文章开始,我们将为孢子记账增加简易的权限系统,它包含接口路径管理、角色可访问接口管理、访问权限中间件。在本篇文章中我们先实现接口路径管理相关的接口。
一、需求
接口路径管理比较简单,需求和前面的 用户 以及 **角色**的需求类似,实现起来很简单。我们先来看一下需求
编号 | 功能 | 描述 |
---|---|---|
1 | 新增接口URL | URL不能重复 |
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为例,剩余三个需求的代码我希望大家能根据需求自己来写出相关代码。
- 新建服务接口
ISysUrlServer
及其实现类SysUrlImp
- 在接口及其实现类中增加
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;} }
- 新建
SysUrlController
,并实现```Add``方法
需求中要求URL不能重复,因此我们在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, "服务器异常"));}}} }
Add
方法中调用了IsExist
方法,如果传入的Url存在则向客户端提示已存在。 - 在接口及其实现类中增加
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的需求已经完成。
三、总结
这篇文章主要讲解了接口路径管理的开发,功能比较简单。从这篇文章开始,我们将引导大家自主编写代码,我只提供其中一个需求的代码,但是对于逻辑复杂的代码,我会带领大家一步一步的来实现。