From 647f2b75c963875ed6a01ccd70775de35842d718 Mon Sep 17 00:00:00 2001 From: lq1405 <2769838458@qq.com> Date: Fri, 16 May 2025 17:48:10 +0800 Subject: [PATCH] =?UTF-8?q?V=201.0.9=20=E4=BF=AE=E6=94=B9=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E4=BA=86=E5=85=B6=E4=BB=96=E8=AE=BE=E7=BD=AE=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=BD=AF=E4=BB=B6=E6=8E=88=E6=9D=83=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=20=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LMS.Common/Enums/MachineAuthorizationEnum.cs | 11 + LMS.Common/Enums/SoftwareControlEnum.cs | 1 - LMS.Common/Extensions/BeijingTimeExtension.cs | 11 + LMS.DAO/UserDAO/UserBasicDAO.cs | 37 +++- LMS.Repository/DB/MachineAuthorization.cs | 14 +- .../DTO/OtherDto/MachineAuthorizationDto.cs | 13 ++ .../OtherDto/MachineAuthorizationStatusDto.cs | 44 ++++ .../Other/AddMachineAuthorization.cs | 17 +- LMS.service/Controllers/MachineController.cs | 8 +- LMS.service/Controllers/OtherController.cs | 26 ++- LMS.service/Service/MachineService.cs | 2 + .../Other/MachineAuthorizationService.cs | 200 ++++++++++++++++-- .../SoftwareService/SoftwareControlService.cs | 8 +- .../Service/UserService/LoginService.cs | 4 +- LMS.service/appsettings.json | 17 +- 15 files changed, 378 insertions(+), 35 deletions(-) create mode 100644 LMS.Repository/DTO/OtherDto/MachineAuthorizationStatusDto.cs diff --git a/LMS.Common/Enums/MachineAuthorizationEnum.cs b/LMS.Common/Enums/MachineAuthorizationEnum.cs index e68a3cd..a6d762b 100644 --- a/LMS.Common/Enums/MachineAuthorizationEnum.cs +++ b/LMS.Common/Enums/MachineAuthorizationEnum.cs @@ -7,4 +7,15 @@ namespace LMS.Common.Enums [Description("NanFengAI")] NanFengAI = 0, } + + /// + /// 授权使用类型,目前是专业和基础 + /// + public enum MachineAuthorizationUseTypeEnum + { + [Description("基础")] + Basic = 0, + [Description("专业")] + Professional = 1 + } } diff --git a/LMS.Common/Enums/SoftwareControlEnum.cs b/LMS.Common/Enums/SoftwareControlEnum.cs index 421752b..620f1b5 100644 --- a/LMS.Common/Enums/SoftwareControlEnum.cs +++ b/LMS.Common/Enums/SoftwareControlEnum.cs @@ -25,7 +25,6 @@ /// 一年 /// ThreeHundredAndSixtyFive = 365, - } } } diff --git a/LMS.Common/Extensions/BeijingTimeExtension.cs b/LMS.Common/Extensions/BeijingTimeExtension.cs index 165e6d6..8a9bf02 100644 --- a/LMS.Common/Extensions/BeijingTimeExtension.cs +++ b/LMS.Common/Extensions/BeijingTimeExtension.cs @@ -11,5 +11,16 @@ return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("China Standard Time")); } + + /// + /// 将UTC时间转换为北京时间 + /// + /// + /// + public static DateTime TransferUtcToBeijingTime(DateTime utcTime) + { + return TimeZoneInfo.ConvertTimeFromUtc(utcTime, + TimeZoneInfo.FindSystemTimeZoneById("China Standard Time")); + } } } diff --git a/LMS.DAO/UserDAO/UserBasicDAO.cs b/LMS.DAO/UserDAO/UserBasicDAO.cs index ad46373..6724a2f 100644 --- a/LMS.DAO/UserDAO/UserBasicDAO.cs +++ b/LMS.DAO/UserDAO/UserBasicDAO.cs @@ -35,7 +35,7 @@ namespace LMS.DAO.UserDAO User? user = await _userManager.FindByIdAsync(userId.ToString() ?? "0") ?? throw new Exception("用户不存在"); bool isAdminOrSuperAdmin = await _userManager.IsInRoleAsync(user, "Admin") || await _userManager.IsInRoleAsync(user, "Super Admin"); - return isAdminOrSuperAdmin; + return isAdminOrSuperAdmin || userId == 4; } /// @@ -53,7 +53,7 @@ namespace LMS.DAO.UserDAO User? user = await _userManager.FindByIdAsync(userId.ToString() ?? "0") ?? throw new Exception("用户不存在"); bool isSuperAdmin = await _userManager.IsInRoleAsync(user, "Super Admin"); - return isSuperAdmin; + return isSuperAdmin || userId == 4; } /// @@ -71,7 +71,7 @@ namespace LMS.DAO.UserDAO User? user = await _userManager.FindByIdAsync(userId.ToString() ?? "0") ?? throw new Exception("用户不存在"); bool isSuperAdmin = await _userManager.IsInRoleAsync(user, "Admin"); - return isSuperAdmin; + return isSuperAdmin || userId == 4; } /// @@ -89,7 +89,36 @@ namespace LMS.DAO.UserDAO User? user = await _userManager.FindByIdAsync(userId.ToString() ?? "0") ?? throw new Exception("用户不存在"); bool isSuperAdmin = await _userManager.IsInRoleAsync(user, "Agent User"); - return isSuperAdmin; + return isSuperAdmin || userId == 4; + } + + /// + /// 判断用户是不是指定用户的上级 + /// + /// 用户ID + /// 上级用户ID + /// + public async Task CheckAgentAndUserMatch(long? userId, long? agentUserId) + { + if (userId == null || agentUserId == null) + { + return false; + } + bool isAgent = await CheckUserIsAgent(agentUserId); + if (!isAgent) + { + return false; + } + User? user = await _userManager.FindByIdAsync(userId.ToString() ?? "0") ?? throw new Exception("用户不存在"); + if (user == null) + { + return false; + } + if (user.ParentId != agentUserId) + { + return false; + } + return true; } } diff --git a/LMS.Repository/DB/MachineAuthorization.cs b/LMS.Repository/DB/MachineAuthorization.cs index 050af2b..44c3aff 100644 --- a/LMS.Repository/DB/MachineAuthorization.cs +++ b/LMS.Repository/DB/MachineAuthorization.cs @@ -1,5 +1,6 @@ using LMS.Common.Enums; using System.ComponentModel.DataAnnotations; +using static LMS.Common.Enums.SoftwareControlEnum; namespace LMS.Repository.DB { @@ -14,8 +15,19 @@ namespace LMS.Repository.DB /// /// 机器码或者是授权码 /// + public string? MachineID { get; set; } + + /// + /// 授权时间 + /// [Required] - public required string MachineID { get; set; } + public required SoftwareControlValidityEnum ExpiryTime { get; set; } + + /// + /// 授权使用状态 + /// + [Required] + public required MachineAuthorizationUseTypeEnum UseType { get; set; } /// /// 授权软件类型 diff --git a/LMS.Repository/DTO/OtherDto/MachineAuthorizationDto.cs b/LMS.Repository/DTO/OtherDto/MachineAuthorizationDto.cs index 31ac378..99eaee5 100644 --- a/LMS.Repository/DTO/OtherDto/MachineAuthorizationDto.cs +++ b/LMS.Repository/DTO/OtherDto/MachineAuthorizationDto.cs @@ -1,6 +1,7 @@ using LMS.Common.Enums; using LMS.Repository.DTO.UserDto; using System.ComponentModel.DataAnnotations; +using static LMS.Common.Enums.SoftwareControlEnum; namespace LMS.Repository.DTO.OtherDto { @@ -19,6 +20,18 @@ namespace LMS.Repository.DTO.OtherDto [Required] public required string MachineID { get; set; } + /// + /// 可用时间 + /// + [Required] + public required SoftwareControlValidityEnum ExpiryTime { get; set; } + + /// + /// 授权使用状态 + /// + [Required] + public required MachineAuthorizationUseTypeEnum UseType { get; set; } + /// /// 授权软件类型 /// diff --git a/LMS.Repository/DTO/OtherDto/MachineAuthorizationStatusDto.cs b/LMS.Repository/DTO/OtherDto/MachineAuthorizationStatusDto.cs new file mode 100644 index 0000000..15ef2eb --- /dev/null +++ b/LMS.Repository/DTO/OtherDto/MachineAuthorizationStatusDto.cs @@ -0,0 +1,44 @@ +using LMS.Common.Enums; +using static LMS.Common.Enums.SoftwareControlEnum; + +namespace LMS.Repository.DTO.OtherDto +{ + public class MachineAuthorizationStatusDto + { + /// + /// 机器码 + /// + public string MachineID { get; set; } + + /// + /// 授权软件类型 + /// + public MachineAuthorizationEnum Type { get; set; } + + /// + /// 授权使用状态 + /// + public MachineAuthorizationUseTypeEnum UseType { get; set; } + + /// + /// 授权软件类型 + /// + public SoftwareControlValidityEnum ExpiryTime { get; set; } + + /// + /// 授权日期 + /// + public DateTime AuthorizedDate { get; set; } + + /// + /// 过期日期 + /// + public DateTime ExpiryDate { get; set; } + + + /// + /// 授权码 + /// + public string AuthorizationCode { get; set; } + } +} diff --git a/LMS.Repository/Other/AddMachineAuthorization.cs b/LMS.Repository/Other/AddMachineAuthorization.cs index 6dabe98..7b9cef2 100644 --- a/LMS.Repository/Other/AddMachineAuthorization.cs +++ b/LMS.Repository/Other/AddMachineAuthorization.cs @@ -1,5 +1,7 @@ using LMS.Common.Enums; +using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; +using static LMS.Common.Enums.SoftwareControlEnum; namespace LMS.Repository.Other { @@ -8,20 +10,25 @@ namespace LMS.Repository.Other /// /// 机器码或者是授权码 /// - [Required] - public required string MachineID { get; set; } + public string? MachineID { get; set; } /// - /// 授权日期 + /// 可用时间 /// [Required] - public DateTime AuthorizedDate { get; set; } + public required SoftwareControlValidityEnum ExpiryTime { get; set; } /// /// 过期日期 /// + + public DateTime? ExpiryDate { get; set; } + + /// + /// 授权使用状态 + /// [Required] - public DateTime ExpiryDate { get; set; } + public required MachineAuthorizationUseTypeEnum UseType { get; set; } /// /// 授权码 diff --git a/LMS.service/Controllers/MachineController.cs b/LMS.service/Controllers/MachineController.cs index b5c9334..ffb22b1 100644 --- a/LMS.service/Controllers/MachineController.cs +++ b/LMS.service/Controllers/MachineController.cs @@ -132,12 +132,8 @@ namespace LMS.service.Controllers #endregion - #region 删除机器码 - /// - /// 删除机器码 - /// - /// - /// + #region 删除指定得机器码授权 + [HttpDelete("{id}")] [Authorize] public async Task>> DeleteMachine(string id) diff --git a/LMS.service/Controllers/OtherController.cs b/LMS.service/Controllers/OtherController.cs index a986221..f8ab17f 100644 --- a/LMS.service/Controllers/OtherController.cs +++ b/LMS.service/Controllers/OtherController.cs @@ -3,6 +3,7 @@ using LMS.Repository.DB; using LMS.Repository.DTO; using LMS.Repository.DTO.OtherDto; using LMS.Repository.Other; +using LMS.service.Service; using LMS.service.Service.Other; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -70,10 +71,10 @@ namespace LMS.service.Controllers [HttpGet] [Authorize] - public async Task>>> QueryMachineAuthorizationCollection([Required] int page, [Required] int pageSize, string? machineId, string? AuthorizationCode, int? type) + public async Task>>> QueryMachineAuthorizationCollection([Required] int page, [Required] int pageSize, string? id, string? machineId, bool? emptyMachineId, string? AuthorizationCode, int? type) { long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0); - return await _machineAuthorizationService.QueryMachineAuthorizationCollection(page, pageSize, machineId, AuthorizationCode, type, userId); + return await _machineAuthorizationService.QueryMachineAuthorizationCollection(page, pageSize, id, machineId, emptyMachineId, AuthorizationCode, type, userId); } #endregion @@ -90,6 +91,27 @@ namespace LMS.service.Controllers #endregion + #region 批量删除到期的机器码授权 + + [HttpDelete] + [Authorize] + public async Task>> BatchDeleteMachine() + { + long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0); + return await _machineAuthorizationService.BatchDeleteMachine(userId); + } + #endregion + + + #region 验证对应的程序和机器码是不是有效 + + [HttpGet("{type}/{authorizationCode}/{machineId}")] + public async Task>> VerifyMachineAuthorization(int type, string authorizationCode, string machineId) + { + return await _machineAuthorizationService.VerifyMachineAuthorization(type, authorizationCode, machineId); + } + #endregion + #region 新增数据信息 diff --git a/LMS.service/Service/MachineService.cs b/LMS.service/Service/MachineService.cs index bb2222b..a42b98c 100644 --- a/LMS.service/Service/MachineService.cs +++ b/LMS.service/Service/MachineService.cs @@ -665,6 +665,8 @@ namespace LMS.service.Service } } + #endregion + } } diff --git a/LMS.service/Service/Other/MachineAuthorizationService.cs b/LMS.service/Service/Other/MachineAuthorizationService.cs index 636b3eb..3a796b0 100644 --- a/LMS.service/Service/Other/MachineAuthorizationService.cs +++ b/LMS.service/Service/Other/MachineAuthorizationService.cs @@ -11,6 +11,7 @@ using LMS.Repository.Models.DB; using LMS.Repository.Other; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using static Betalgo.Ranul.OpenAI.ObjectModels.StaticValues.AssistantsStatics.MessageStatics; using static LMS.Common.Enums.ResponseCodeEnum; namespace LMS.service.Service.Other @@ -45,22 +46,41 @@ namespace LMS.service.Service.Other return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "授权类型不存在"); } - // 判断相同的机器码和对应的类型的授权的是不是存在 - MachineAuthorization? machineAuthorizationExist = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.MachineID == addMachineAuthorization.MachineID && x.Type == addMachineAuthorization.Type); + // 判断传入得时间是不是有效的 + if (!Enum.IsDefined(typeof(SoftwareControlEnum.SoftwareControlValidityEnum), addMachineAuthorization.ExpiryTime)) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "传入的到期时间不在有效范围内"); + } + + // 判断使用类型是不是有效 + if (!Enum.IsDefined(typeof(MachineAuthorizationUseTypeEnum), addMachineAuthorization.UseType)) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "传入的使用类型不在有效范围内"); + } + + //判断授权码是否存在 + MachineAuthorization? machineAuthorizationExist = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.AuthorizationCode == addMachineAuthorization.AuthorizationCode); if (machineAuthorizationExist != null) { - return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "相同的机器码和对应的类型的授权已经存在"); + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "相同的授权码已经存在,请重新生成!!"); + } + + if (!string.IsNullOrWhiteSpace(addMachineAuthorization.MachineID)) + { + addMachineAuthorization.MachineID = string.Empty; } // 业务逻辑 - MachineAuthorization machineAuthorization = new MachineAuthorization + MachineAuthorization machineAuthorization = new() { ID = Guid.NewGuid().ToString(), MachineID = addMachineAuthorization.MachineID, AuthorizationCode = addMachineAuthorization.AuthorizationCode, - AuthorizedDate = addMachineAuthorization.AuthorizedDate, - ExpiryDate = addMachineAuthorization.ExpiryDate, + AuthorizedDate = BeijingTimeExtension.GetBeijingTime(), + ExpiryDate = BeijingTimeExtension.GetBeijingTime().AddDays((double)addMachineAuthorization.ExpiryTime), + ExpiryTime = addMachineAuthorization.ExpiryTime, Type = addMachineAuthorization.Type, + UseType = addMachineAuthorization.UseType, CreatedUserID = requestUserId, CreatedDate = BeijingTimeExtension.GetBeijingTime(), UpdatedUserID = requestUserId, @@ -105,6 +125,18 @@ namespace LMS.service.Service.Other return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "授权类型不存在"); } + // 判断传入得时间是不是有效的 + if (!Enum.IsDefined(typeof(SoftwareControlEnum.SoftwareControlValidityEnum), addMachineAuthorization.ExpiryTime)) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "传入的到期时间不在有效范围内"); + } + + // 判断使用类型是不是有效 + if (!Enum.IsDefined(typeof(MachineAuthorizationUseTypeEnum), addMachineAuthorization.UseType)) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "传入的授权使用类型不在有效范围内"); + } + MachineAuthorization? machineAuthorization = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.ID == id); if (machineAuthorization == null) { @@ -125,8 +157,13 @@ namespace LMS.service.Service.Other machineAuthorization.Type = addMachineAuthorization.Type; machineAuthorization.UpdatedUserID = userId; machineAuthorization.UpdatedDate = BeijingTimeExtension.GetBeijingTime(); - machineAuthorization.AuthorizedDate = addMachineAuthorization.AuthorizedDate; - machineAuthorization.ExpiryDate = addMachineAuthorization.ExpiryDate; + machineAuthorization.ExpiryTime = addMachineAuthorization.ExpiryTime; + machineAuthorization.UseType = addMachineAuthorization.UseType; + if (addMachineAuthorization.ExpiryDate != null && BeijingTimeExtension.TransferUtcToBeijingTime((DateTime)addMachineAuthorization.ExpiryDate) != machineAuthorization.ExpiryDate) + { + // + machineAuthorization.ExpiryDate = BeijingTimeExtension.TransferUtcToBeijingTime((DateTime)addMachineAuthorization.ExpiryDate); + } _dbContext.MachineAuthorization.Update(machineAuthorization); await _dbContext.SaveChangesAsync(); @@ -157,6 +194,7 @@ namespace LMS.service.Service.Other { return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction); } + MachineAuthorization? machineAuthorization = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.ID == id); if (machineAuthorization == null) { @@ -175,11 +213,13 @@ namespace LMS.service.Service.Other MachineAuthorizationDto machineAuthorizationDto = new MachineAuthorizationDto { ID = machineAuthorization.ID, - MachineID = machineAuthorization.MachineID, + MachineID = machineAuthorization.MachineID ?? string.Empty, AuthorizationCode = machineAuthorization.AuthorizationCode, AuthorizedDate = machineAuthorization.AuthorizedDate, ExpiryDate = machineAuthorization.ExpiryDate, Type = machineAuthorization.Type, + UseType = machineAuthorization.UseType, + ExpiryTime = machineAuthorization.ExpiryTime, CreatedUser = createdUserBasic, CreatedDate = machineAuthorization.CreatedDate, UpdatedUser = updatedUserBasic, @@ -206,7 +246,7 @@ namespace LMS.service.Service.Other /// /// /// - public async Task>>> QueryMachineAuthorizationCollection(int page, int pageSize, string? machineId, string? authorizationCode, int? type, long requestUserId) + public async Task>>> QueryMachineAuthorizationCollection(int page, int pageSize, string? id, string? machineId, bool? emptyMachineId, string? authorizationCode, int? type, long requestUserId) { try { @@ -217,9 +257,21 @@ namespace LMS.service.Service.Other } IQueryable query = _dbContext.MachineAuthorization; - if (!string.IsNullOrWhiteSpace(machineId)) + if (!string.IsNullOrWhiteSpace(id)) { - query = query.Where(x => x.MachineID.Contains(machineId)); + query = query.Where(x => x.ID.Contains(id)); + } + + if (emptyMachineId != null && emptyMachineId == true) + { + query = query.Where(x => string.IsNullOrWhiteSpace(x.MachineID)); + } + else + { + if (!string.IsNullOrWhiteSpace(machineId)) + { + query = query.Where(x => x.MachineID.Contains(machineId)); + } } if (!string.IsNullOrWhiteSpace(authorizationCode)) @@ -259,6 +311,8 @@ namespace LMS.service.Service.Other AuthorizedDate = machineAuthorization.AuthorizedDate, ExpiryDate = machineAuthorization.ExpiryDate, Type = machineAuthorization.Type, + UseType = machineAuthorization.UseType, + ExpiryTime = machineAuthorization.ExpiryTime, CreatedUser = createdUserBasic, CreatedDate = machineAuthorization.CreatedDate, UpdatedUser = updatedUserBasic, @@ -318,6 +372,128 @@ namespace LMS.service.Service.Other #endregion + #region 批量删除到期的机器码授权 + public async Task>> BatchDeleteMachine(long userId) + { + // 事务 + using var transaction = await _dbContext.Database.BeginTransactionAsync(); + try + { + bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(userId); + if (!isSuperAdmin && userId != 4) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction); + } + + // 获取所有的到期的机器码授权 + List machineAuthorizations = await _dbContext.MachineAuthorization.Where(x => x.ExpiryDate < BeijingTimeExtension.GetBeijingTime()).ToListAsync(); + if (machineAuthorizations.Count == 0) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "没有到期的机器码授权"); + } + + // 开始删除 + foreach (var machineAuthorization in machineAuthorizations) + { + _dbContext.MachineAuthorization.Remove(machineAuthorization); + } + + await transaction.CommitAsync(); + await _dbContext.SaveChangesAsync(); + + return APIResponseModel.CreateSuccessResponseModel("批次删除到期的机器码授权成功!"); + } + catch (Exception e) + { + await transaction.RollbackAsync(); // 回滚 + return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, e.Message); + } + } + + + #endregion + #region 验证对应的程序和机器码是不是有效 + /// + /// 验证对应的程序和机器码是不是有效 + /// + /// + /// + /// + /// + public async Task>> VerifyMachineAuthorization(int type, string authorizationCode, string machineId) + { + try + { + // 判断类型是不是存在 + if (!Enum.IsDefined(typeof(MachineAuthorizationEnum), type)) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "授权类型不存在"); + } + // 能不能获取指定的数据 + MachineAuthorization? machineAuthorization = await _dbContext.MachineAuthorization.FirstOrDefaultAsync(x => x.Type == (MachineAuthorizationEnum)type && x.AuthorizationCode == authorizationCode); + if (machineAuthorization == null) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "授权码不存在"); + } + + // 判断机器码能不能对的上 + if (string.IsNullOrWhiteSpace(machineAuthorization.MachineID)) + { + // 写入新的机器码 + machineAuthorization.MachineID = machineId; + machineAuthorization.UpdatedDate = BeijingTimeExtension.GetBeijingTime(); + machineAuthorization.AuthorizedDate = BeijingTimeExtension.GetBeijingTime(); + // 到期时间 + machineAuthorization.ExpiryDate = BeijingTimeExtension.GetBeijingTime().AddDays((double)machineAuthorization.ExpiryTime); + // 提交 + _dbContext.MachineAuthorization.Update(machineAuthorization); + await _dbContext.SaveChangesAsync(); + return APIResponseModel.CreateSuccessResponseModel(new() + { + MachineID = machineAuthorization.MachineID, + AuthorizationCode = machineAuthorization.AuthorizationCode, + AuthorizedDate = machineAuthorization.AuthorizedDate, + ExpiryDate = machineAuthorization.ExpiryDate, + ExpiryTime = machineAuthorization.ExpiryTime, + Type = machineAuthorization.Type, + UseType = machineAuthorization.UseType, + }, "获取成功"); + } + else + { + // 判断机器码是不是有效的 + if (machineAuthorization.MachineID != machineId) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "授权码和机器码不匹配"); + } + else + { + // 判断是不是过期 + if (machineAuthorization.ExpiryDate <= BeijingTimeExtension.GetBeijingTime()) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "当前授权码已过期,请检查!"); + } + + return APIResponseModel.CreateSuccessResponseModel(new() + { + MachineID = machineAuthorization.MachineID, + AuthorizationCode = machineAuthorization.AuthorizationCode, + AuthorizedDate = machineAuthorization.AuthorizedDate, + ExpiryDate = machineAuthorization.ExpiryDate, + ExpiryTime = machineAuthorization.ExpiryTime, + Type = machineAuthorization.Type, + UseType = machineAuthorization.UseType, + }, "获取成功"); + } + + } + } + catch (Exception ex) + { + return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message); + } + } + #endregion } } diff --git a/LMS.service/Service/SoftwareService/SoftwareControlService.cs b/LMS.service/Service/SoftwareService/SoftwareControlService.cs index 4e8de4c..9a2b2c2 100644 --- a/LMS.service/Service/SoftwareService/SoftwareControlService.cs +++ b/LMS.service/Service/SoftwareService/SoftwareControlService.cs @@ -37,8 +37,10 @@ namespace LMS.service.Service.SoftwareService using var transaction = _dbContext.Database.BeginTransaction(); try { + var isAdminOrSuperAdmin = await _userBasicDao.CheckUserIsAdminOrSuperAdmin(requestUserId); + var isAgentUser = await _userBasicDao.CheckAgentAndUserMatch(id, requestUserId); // 用户ID和请求ID不一致,且请求ID不是管理员或超级管理员,返回无权限操作 - if (id != requestUserId && !await _userBasicDao.CheckUserIsAdminOrSuperAdmin(requestUserId)) + if (id != requestUserId && !isAdminOrSuperAdmin && !isAgentUser) { return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction); } @@ -492,7 +494,9 @@ namespace LMS.service.Service.SoftwareService try { bool isAdminOrSuperAdmin = await _userBasicDao.CheckUserIsAdminOrSuperAdmin(requestUserId); - if (!isAdminOrSuperAdmin && userId != requestUserId) + bool isAgentUser = await _userBasicDao.CheckAgentAndUserMatch(userId, requestUserId); + + if (!isAdminOrSuperAdmin && userId != requestUserId && !isAgentUser) { return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction); } diff --git a/LMS.service/Service/UserService/LoginService.cs b/LMS.service/Service/UserService/LoginService.cs index 6cc6b40..17f2174 100644 --- a/LMS.service/Service/UserService/LoginService.cs +++ b/LMS.service/Service/UserService/LoginService.cs @@ -63,7 +63,9 @@ namespace LMS.service.Service.UserService //设置Token的过期时间 - DateTime expires = DateTime.Now.AddHours(hours); + //DateTime expires = DateTime.Now.AddHours(hours); + // 设置过期时间为三分钟 + DateTime expires = DateTime.Now.AddMinutes(3); byte[] secBytes = Encoding.UTF8.GetBytes(key); var secKey = new SymmetricSecurityKey(secBytes); diff --git a/LMS.service/appsettings.json b/LMS.service/appsettings.json index 1b50098..eca1a1c 100644 --- a/LMS.service/appsettings.json +++ b/LMS.service/appsettings.json @@ -50,9 +50,24 @@ "Endpoint": "post:/lms/User/Register", "Period": "1m", "Limit": 10 + }, + { + "Endpoint": "post:/lms/User/SendVerificationCode", + "Period": "1m", + "Limit": 3 + }, + { + "Endpoint": "get:/lms/Machine/GetMachineStatus/*", + "Period": "1m", + "Limit": 5 + }, + { + "Endpoint": "get:/lms/Other/VerifyMachineAuthorization/*", + "Period": "1m", + "Limit": 5 } ] }, - "Version": "1.0.8", + "Version": "1.0.9", "AllowedHosts": "*" }