diff --git a/LMS.Common/Enums/OptionTypeEnum.cs b/LMS.Common/Enums/OptionTypeEnum.cs
index dbe41be..49d19d6 100644
--- a/LMS.Common/Enums/OptionTypeEnum.cs
+++ b/LMS.Common/Enums/OptionTypeEnum.cs
@@ -8,6 +8,16 @@ public enum OptionTypeEnum
Boolean = 4
}
+///
+/// option的分类
+///
+public enum OptionCategory
+{
+ System = 1,
+ LaiTool = 2,
+ NanFengAI = 3,
+}
+
public static class OptionKeyName
{
///
diff --git a/LMS.DAO/ApplicationDbContext.cs b/LMS.DAO/ApplicationDbContext.cs
index 4331606..1c9a317 100644
--- a/LMS.DAO/ApplicationDbContext.cs
+++ b/LMS.DAO/ApplicationDbContext.cs
@@ -5,6 +5,7 @@ using LMS.Repository.Models.DB;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
+//using Newtonsoft.Json;
using System.Text.Json;
namespace LMS.DAO
@@ -69,6 +70,17 @@ namespace LMS.DAO
);
modelBuilder.Entity()
.HasKey(us => new { us.UserId, us.SoftwareId });
+
+ // Options表的RoleIds字段使用JSON格式存储
+ modelBuilder.Entity(entity =>
+ {
+ entity.Property(e => e.RoleIds)
+ .HasConversion(
+ v => Newtonsoft.Json.JsonConvert.SerializeObject(v), // 将 List 序列化为 JSON 字符串
+ v => Newtonsoft.Json.JsonConvert.DeserializeObject>(v ?? "[]") ?? new List() // 反序列化
+ )
+ .HasColumnType("json"); // 指定MySQL字段类型为JSON
+ });
}
}
}
diff --git a/LMS.DAO/UserDAO/UserBasicDAO.cs b/LMS.DAO/UserDAO/UserBasicDAO.cs
index 6724a2f..99d7fbd 100644
--- a/LMS.DAO/UserDAO/UserBasicDAO.cs
+++ b/LMS.DAO/UserDAO/UserBasicDAO.cs
@@ -1,11 +1,14 @@
using LMS.Repository.Models.DB;
using Microsoft.AspNetCore.Identity;
+using Microsoft.EntityFrameworkCore;
namespace LMS.DAO.UserDAO
{
- public class UserBasicDao(UserManager userManager)
+ public class UserBasicDao(UserManager userManager, ApplicationDbContext dbContext)
{
private readonly UserManager _userManager = userManager;
+ private readonly ApplicationDbContext _dbContext = dbContext;
+
///
/// 检查用户是否存在,通过用户ID
///
@@ -120,6 +123,27 @@ namespace LMS.DAO.UserDAO
}
return true;
}
+
+ ///
+ /// 获取用户的所有角色ID
+ ///
+ ///
+ ///
+ ///
+ public async Task> GetUserRoleIds(long userId)
+ {
+ // 查找用户,若不存在直接抛异常
+ User user = await _userManager.FindByIdAsync(userId.ToString())
+ ?? throw new Exception("用户不存在");
+
+ // 直接查询 UserRoles 表获取所有关联的 RoleId
+ var roleIds = await _dbContext.UserRoles
+ .Where(ur => ur.UserId == user.Id)
+ .Select(ur => ur.RoleId)
+ .ToListAsync();
+
+ return roleIds;
+ }
}
}
diff --git a/LMS.Repository/DB/Options.cs b/LMS.Repository/DB/Options.cs
index 1672250..5604905 100644
--- a/LMS.Repository/DB/Options.cs
+++ b/LMS.Repository/DB/Options.cs
@@ -7,6 +7,7 @@ namespace LMS.Repository.DB;
public class Options
{
[Key]
+ [Required]
public required string Key { get; set; } = string.Empty;
///
@@ -14,9 +15,17 @@ public class Options
///
public string? Value { get; set; } = string.Empty;
+ [Required]
public OptionTypeEnum Type { get; set; } = OptionTypeEnum.String;
- // 写一个字段,映射Value,判断是不是json字符串,是的话就解析成对象
+ [Required]
+ public OptionCategory Category { get; set; } = OptionCategory.System;
+
+ [Required]
+ public List RoleIds { get; set; } = [];
+
+ public DateTime CreatedTime { get; set; }
+
// 写一个字段,映射Value,判断是不是json字符串,是的话就解析成对象
public T? GetValueObject()
{
diff --git a/LMS.Repository/DTO/OptionDto/OptionSimpleDto.cs b/LMS.Repository/DTO/OptionDto/OptionSimpleDto.cs
new file mode 100644
index 0000000..221b0a0
--- /dev/null
+++ b/LMS.Repository/DTO/OptionDto/OptionSimpleDto.cs
@@ -0,0 +1,21 @@
+using LMS.Common.Enums;
+
+namespace LMS.Repository.DTO.OptionDto
+{
+ public class OptionSimpleDto
+ {
+ public required string Key { get; set; } = string.Empty;
+
+ ///
+ /// Value of the option,这个值是一个json字符串
+ ///
+ public string? Value { get; set; } = string.Empty;
+
+
+ public OptionTypeEnum Type { get; set; } = OptionTypeEnum.String;
+
+ public OptionCategory Category { get; set; } = OptionCategory.System;
+
+ public List RoleNames { get; set; } = [];
+ }
+}
diff --git a/LMS.Repository/DTO/OptionsDto.cs b/LMS.Repository/DTO/OptionDto/OptionsDto.cs
similarity index 89%
rename from LMS.Repository/DTO/OptionsDto.cs
rename to LMS.Repository/DTO/OptionDto/OptionsDto.cs
index fe109b0..aa8acce 100644
--- a/LMS.Repository/DTO/OptionsDto.cs
+++ b/LMS.Repository/DTO/OptionDto/OptionsDto.cs
@@ -1,6 +1,6 @@
using LMS.Common.Enums;
-namespace LMS.Repository.DTO;
+namespace LMS.Repository.DTO.OptionDto;
public class OptionsDto
{
diff --git a/LMS.Repository/Options/AddOptionModel .cs b/LMS.Repository/Options/AddOptionModel .cs
new file mode 100644
index 0000000..de1b009
--- /dev/null
+++ b/LMS.Repository/Options/AddOptionModel .cs
@@ -0,0 +1,26 @@
+
+using LMS.Common.Enums;
+using System.ComponentModel.DataAnnotations;
+
+namespace LMS.Repository.Options;
+
+public class AddOptionModel
+{
+
+ [Required]
+ public required string Key { get; set; } = string.Empty;
+
+ ///
+ /// Value of the option,这个值是一个json字符串
+ ///
+ public string? Value { get; set; } = string.Empty;
+
+ [Required]
+ public OptionTypeEnum Type { get; set; } = OptionTypeEnum.String;
+
+ [Required]
+ public OptionCategory Category { get; set; } = OptionCategory.System;
+
+ [Required]
+ public List RoleNames { get; set; }
+}
diff --git a/LMS.Repository/Options/ModifyOptionByKeyModel.cs b/LMS.Repository/Options/ModifyOptionByKeyModel.cs
new file mode 100644
index 0000000..f450e5a
--- /dev/null
+++ b/LMS.Repository/Options/ModifyOptionByKeyModel.cs
@@ -0,0 +1,20 @@
+
+using LMS.Common.Enums;
+using System.ComponentModel.DataAnnotations;
+
+namespace LMS.Repository.Options;
+
+public class ModifyOptionByKeyModel
+{
+ ///
+ /// Value of the option,这个值是一个json字符串
+ ///
+
+ public required string Value { get; set; } = string.Empty;
+
+ public required OptionTypeEnum Type { get; set; } = OptionTypeEnum.String;
+
+ public required OptionCategory Category { get; set; } = OptionCategory.System;
+ [Required]
+ public required List RoleNames { get; set; } = [];
+}
diff --git a/LMS.service/Configuration/AutoMapperConfig.cs b/LMS.service/Configuration/AutoMapperConfig.cs
index f4f7b9f..0ac7c49 100644
--- a/LMS.service/Configuration/AutoMapperConfig.cs
+++ b/LMS.service/Configuration/AutoMapperConfig.cs
@@ -1,6 +1,7 @@
using AutoMapper;
using LMS.Repository.DB;
using LMS.Repository.DTO;
+using LMS.Repository.DTO.OptionDto;
using LMS.Repository.DTO.PromptDto;
using LMS.Repository.DTO.PromptTypeDto;
using LMS.Repository.DTO.UserDto;
diff --git a/LMS.service/Controllers/OptionsController.cs b/LMS.service/Controllers/OptionsController.cs
index 36e5d99..53dd03d 100644
--- a/LMS.service/Controllers/OptionsController.cs
+++ b/LMS.service/Controllers/OptionsController.cs
@@ -1,11 +1,13 @@
using LMS.Common.Extensions;
using LMS.Repository.DB;
using LMS.Repository.DTO;
+using LMS.Repository.DTO.OptionDto;
using LMS.Repository.Models.DB;
using LMS.Repository.Options;
using LMS.service.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using System.ComponentModel.DataAnnotations;
using static LMS.Common.Enums.ResponseCodeEnum;
namespace LMS.service.Controllers
@@ -29,6 +31,7 @@ namespace LMS.service.Controllers
[HttpGet("{optionsKey}")]
public async Task>>> GetSimpleOptions(string optionsKey)
{
+ long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
return await _optionsService.GetSimpleOptions(optionsKey);
}
@@ -73,5 +76,113 @@ namespace LMS.service.Controllers
}
#endregion
+
+
+ }
+
+ ///
+ /// Laitool 的配置项控制器
+ ///
+ ///
+ [Route("lms/[controller]/[action]")]
+ [ApiController]
+ public class OptionsController(OptionsService optionsService) : ControllerBase
+ {
+ private readonly OptionsService _optionsService = optionsService;
+
+ #region 获取指定的配置项
+ ///
+ /// 获取简单的配置项,无需权限
+ ///
+ ///
+ ///
+ [HttpGet("{userId}/{category}/{optionsKey}")]
+ public async Task>> GetOptionsByKey(long userId, int category, string optionsKey)
+ {
+ return await _optionsService.GetOptionsByKey(userId, category, optionsKey);
+ }
+
+ #endregion
+
+ #region 获取指定的配置项,全部
+ ///
+ /// 获取简单的配置项,无需权限
+ ///
+ ///
+ ///
+ [HttpGet("{category}/{optionsKey}")]
+ [Authorize]
+ public async Task>> GetAllMessageOptionsByKey(int category, string optionsKey)
+ {
+ long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
+ return await _optionsService.GetAllMessageOptionsByKey(category, optionsKey, userId);
+ }
+
+ #endregion
+
+
+ #region 获取指定条件的数据信息集合
+ ///
+ /// 获取简单的配置项,无需权限
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Authorize]
+ public async Task>>> QueryOptionCollection([Required] int page, [Required] int pageSize, string? key, int? type, int? category, [FromQuery] string[]? roleNames)
+ {
+
+ long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
+ return await _optionsService.QueryOptionCollection(page, pageSize, key, type, category, roleNames, userId);
+ }
+
+ #endregion
+
+ #region 修改数据配置项
+
+ [HttpPost("{key}")]
+ [Authorize]
+ public async Task>> ModifyOptionsByKey(string key, [FromBody] ModifyOptionByKeyModel model)
+ {
+ if (!ModelState.IsValid)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError);
+ }
+ long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
+ return await _optionsService.ModifyOptionsByKey(key, model, userId);
+ }
+
+ #endregion
+
+ #region 新增指定的数据项
+
+ [HttpPost]
+ [Authorize]
+ public async Task>> AddOptions([FromBody] AddOptionModel option)
+ {
+ if (!ModelState.IsValid)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError);
+ }
+ long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
+ return await _optionsService.AddOptions(option, userId);
+ }
+ #endregion
+
+ #region 删除指定的key的数据
+
+ [HttpDelete("{category}/{key}")]
+ [Authorize]
+ public async Task>> DeleteOptionsByKey(int category, string key)
+ {
+ if (!ModelState.IsValid)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError);
+ }
+ long userId = ConvertExtension.ObjectToLong(HttpContext.Items["UserId"] ?? 0);
+ return await _optionsService.DeleteOptionsByKey(category, key, userId);
+ }
+
+ #endregion
}
}
diff --git a/LMS.service/LMS.service.csproj b/LMS.service/LMS.service.csproj
index 4708f52..081d19b 100644
--- a/LMS.service/LMS.service.csproj
+++ b/LMS.service/LMS.service.csproj
@@ -13,6 +13,7 @@
+
@@ -35,6 +36,7 @@
+
diff --git a/LMS.service/Service/OptionsService.cs b/LMS.service/Service/OptionsService.cs
index d4fea9a..3df6cdf 100644
--- a/LMS.service/Service/OptionsService.cs
+++ b/LMS.service/Service/OptionsService.cs
@@ -1,5 +1,6 @@
using AutoMapper;
using LMS.Common.Dictionary;
+using LMS.Common.Enums;
using LMS.Common.Templates;
using LMS.DAO;
using LMS.DAO.UserDAO;
@@ -11,14 +12,22 @@ using LMS.service.Extensions.Mail;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Options;
+using System.Linq;
using static LMS.Common.Enums.ResponseCodeEnum;
+using Options = LMS.Repository.DB.Options;
+using System.Linq.Dynamic.Core;
+using LinqKit;
+using LMS.Repository.DTO.OptionDto;
+using LMS.Common.Extensions;
namespace LMS.service.Service
{
- public class OptionsService(ApplicationDbContext context, UserManager userManager, IMapper mapper, UserBasicDao userBasicDao, EmailService emailService)
+ public class OptionsService(ApplicationDbContext context, UserManager userManager, RoleManager roleManager, IMapper mapper, UserBasicDao userBasicDao, EmailService emailService)
{
private readonly ApplicationDbContext _context = context;
private readonly UserManager _userManager = userManager;
+ private readonly RoleManager _roleManager = roleManager;
private readonly IMapper _mapper = mapper;
private readonly UserBasicDao _userBasicDao = userBasicDao;
private readonly EmailService _emailService = emailService;
@@ -129,12 +138,7 @@ namespace LMS.service.Service
using var transaction = await _context.Database.BeginTransactionAsync();
try
{
- User? user = await _userManager.FindByIdAsync(userId.ToString());
- if (user == null)
- {
- return APIResponseModel.CreateErrorResponseModel(ResponseCode.FindUserByIdFail);
- }
- bool isAdminOrSuperAdmin = await _userManager.IsInRoleAsync(user, "Admin") || await _userManager.IsInRoleAsync(user, "Super Admin");
+ bool isAdminOrSuperAdmin = await _userBasicDao.CheckUserIsAdminOrSuperAdmin(userId);
// 判断用户是不是管理员
if (!isAdminOrSuperAdmin)
{
@@ -200,5 +204,392 @@ namespace LMS.service.Service
}
#endregion
+
+ #region 获取指定的配置项
+ ///
+ /// 获取指定的配置项,需要判断权限
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task>> GetOptionsByKey(long userId, int category, string optionsKey)
+ {
+ try
+ {
+ // 判断分类是不是在对应的enum里面
+ if (!Enum.IsDefined(typeof(OptionCategory), category))
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "该分类不存在");
+ }
+
+ Options? options = await _context.Options.FirstOrDefaultAsync(x => x.Key == optionsKey && (OptionCategory)category == x.Category) ?? throw new Exception("数据不存在");
+
+ List roleIds = [];
+ if (userId != 0)
+ {
+ roleIds = await _userBasicDao.GetUserRoleIds(userId);
+ }
+
+ // 数据存在 对比权限
+ if (options.RoleIds.Count == 0)
+ {
+ // 不需要权限 直接返回
+ return APIResponseModel.CreateSuccessResponseModel(_mapper.Map(options));
+ }
+ else
+ {
+ // 需要判断权限 判断 roleIds 是不是有权限在 options.RoleIds 里面
+ bool hasPermission = false;
+ foreach (var roleId in roleIds)
+ {
+ if (options.RoleIds.Contains(roleId))
+ {
+ hasPermission = true;
+ break;
+ }
+ }
+ if (!hasPermission)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
+ }
+ else
+ {
+ return APIResponseModel.CreateSuccessResponseModel(_mapper.Map(options));
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
+ }
+ }
+
+ #endregion
+
+ #region 获取指定的数据项
+ internal async Task>> ModifyOptionsByKey(string key, ModifyOptionByKeyModel model, long userId)
+ {
+ try
+ {
+ bool isAdminOrSuperAdmin = await _userBasicDao.CheckUserIsAdminOrSuperAdmin(userId);
+ // 判断type 和 category 是不是在enum中
+
+ // 判断分类是不是在对应的enum里面
+ if (!Enum.IsDefined(typeof(OptionCategory), model.Category))
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "该分类不存在");
+ }
+
+ if (!Enum.IsDefined(typeof(OptionTypeEnum), model.Type))
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "该类型不存在");
+ }
+
+ // 判断用户是不是管理员
+ if (!isAdminOrSuperAdmin)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
+ }
+ Options? options = await _context.Options.FirstOrDefaultAsync(x => x.Key == key);
+ if (options == null)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.FindOptionsFail);
+ }
+
+ List ids = [];
+ // 判断所有的roleId是不是都存在
+ if (model.RoleNames != null && model.RoleNames.Count > 0)
+ {
+ foreach (var roleId in model.RoleNames)
+ {
+ Role? role = await _roleManager.FindByNameAsync(roleId.ToString());
+ if (role == null)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "角色列表中有部分ID不存在");
+ }
+ ids.Add(role.Id);
+ }
+ }
+
+ // 开始修改配置项
+ options.Value = model.Value;
+ options.RoleIds = ids;
+ options.Type = model.Type;
+ options.Category = model.Category;
+ _context.Options.Update(options);
+ await _context.SaveChangesAsync();
+ return APIResponseModel.CreateSuccessResponseModel("修改成功");
+ }
+ catch (Exception ex)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
+ }
+ }
+
+ #endregion
+
+ #region 查询数据信息的集合
+
+ ///
+ /// 查询数据信息的集合
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task>>> QueryOptionCollection(int page, int pageSize, string? key, int? type, int? category, string[]? roleNames, long userId)
+ {
+ try
+ {
+ bool isAdminOrSuperAdmin = await _userBasicDao.CheckUserIsAdminOrSuperAdmin(userId);
+ // 判断用户是不是管理员
+ if (!isAdminOrSuperAdmin)
+ {
+ return APIResponseModel>.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
+ }
+ IQueryable query = _context.Options;
+ if (!string.IsNullOrWhiteSpace(key))
+ {
+ query = query.Where(x => x.Key.Contains(key));
+ }
+
+ if (type != null)
+ {
+ if (!Enum.IsDefined(typeof(OptionTypeEnum), type))
+ {
+ return APIResponseModel>.CreateErrorResponseModel(ResponseCode.ParameterError, "该类型不存在");
+ }
+ query = query.Where(x => x.Type == (OptionTypeEnum)type);
+ }
+
+ if (category != null)
+ {
+ if (!Enum.IsDefined(typeof(OptionCategory), category))
+ {
+ return APIResponseModel>.CreateErrorResponseModel(ResponseCode.ParameterError, "该分类不存在");
+ }
+ query = query.Where(x => x.Category == (OptionCategory)category);
+ }
+
+ List ids = [];
+ if (roleNames != null && roleNames.Length > 0)
+ {
+ // 判断所有的roleId是不是都存在
+ foreach (var roleId in roleNames)
+ {
+ Role? role = await _roleManager.FindByNameAsync(roleId.ToString());
+ if (role != null)
+ {
+ ids.Add(role.Id);
+ }
+ }
+ }
+ if (ids.Count > 0)
+ {
+ var predicate = PredicateBuilder.New(false);
+ foreach (var roleId in ids)
+ {
+ var localId = roleId; // 闭包捕获
+ predicate = predicate.Or(x => EF.Functions.JsonContains(x.RoleIds, localId.ToString()));
+ // 如果你的 RoleIds 存数字,localId.ToString(),否则加引号
+ // predicate = predicate.Or(x => EF.Functions.JsonContains(x.RoleIds, $"\"{localId}\""));
+ }
+ query = query.Where(predicate);
+ }
+
+ // 查询总数
+ int total = await query.CountAsync();
+
+ // 创建时间倒叙
+ query = query.OrderByDescending(x => x.CreatedTime);
+
+ // 分页
+ query = query.Skip((page - 1) * pageSize).Take(pageSize);
+
+
+
+ List? options = await query.ToListAsync();
+ List roles = await _context.Roles.ToListAsync();
+ List optionDtos = new List();
+ foreach (var option in options)
+ {
+ OptionSimpleDto optionDto = new()
+ {
+ Key = option.Key,
+ Value = option.Value,
+ Type = option.Type,
+ Category = option.Category,
+ RoleNames = option.RoleIds.Select(x => roles.FirstOrDefault(r => r.Id == x)).Where(r => r != null).Select(r => r.Name).ToList()
+ };
+ optionDtos.Add(optionDto);
+ }
+
+
+ return APIResponseModel>.CreateSuccessResponseModel(new CollectionResponse
+ {
+ Total = total,
+ Collection = optionDtos,
+ Current = page
+ });
+ }
+ catch (Exception ex)
+ {
+ return APIResponseModel>.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
+ }
+ }
+
+ #endregion
+
+ #region 新增指定的数据项
+ public async Task>> AddOptions(AddOptionModel option, long userId)
+ {
+ try
+ {
+ bool isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(userId);
+
+ if (!isSuperAdmin)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
+ }
+ // 判断type 和 category 是不是在enum中
+
+ // 判断分类是不是在对应的enum里面
+ if (!Enum.IsDefined(typeof(OptionCategory), option.Category))
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "该分类不存在");
+ }
+
+ if (!Enum.IsDefined(typeof(OptionTypeEnum), option.Type))
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "该类型不存在");
+ }
+
+ List ids = [];
+ // 判断所有的roleId是不是都存在
+ if (option.RoleNames != null && option.RoleNames.Count > 0)
+ {
+ foreach (var roleId in option.RoleNames)
+ {
+ Role? role = await _roleManager.FindByNameAsync(roleId.ToString());
+ if (role == null)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "角色列表中有部分ID不存在");
+ }
+ ids.Add(role.Id);
+ }
+ }
+ // 判断当前的key是不是已经存在
+ Options? options = await _context.Options.FirstOrDefaultAsync(x => x.Key == option.Key && x.Category == option.Category);
+ if (options != null)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "当前分类的key已经存在");
+ }
+ if (string.IsNullOrWhiteSpace(option.Value))
+ {
+ option.Value = string.Empty;
+ }
+
+ Options options1 = new()
+ {
+ Key = option.Key,
+ Value = option.Value,
+ Type = option.Type,
+ Category = option.Category,
+ RoleIds = ids,
+ CreatedTime = BeijingTimeExtension.GetBeijingTime()
+ };
+ // 添加数据
+ await _context.Options.AddAsync(options1);
+ await _context.SaveChangesAsync();
+ return APIResponseModel.CreateSuccessResponseModel("添加成功");
+ }
+ catch (Exception ex)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
+ }
+ }
+
+ #endregion
+
+ #region 删除指定的key的数据
+ ///
+ /// 删除指定的数据
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task>> DeleteOptionsByKey(int category, string key, long userId)
+ {
+ try
+ {
+ var isSuperAdmin = await _userBasicDao.CheckUserIsSuperAdmin(userId);
+ // 判断用户是不是管理员
+ if (!isSuperAdmin)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
+ }
+ Options? options = await _context.Options.FirstOrDefaultAsync(x => x.Key == key && x.Category == (OptionCategory)category);
+ if (options == null)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.FindOptionsFail);
+ }
+ // 删除数据
+ _context.Options.Remove(options);
+ await _context.SaveChangesAsync();
+ return APIResponseModel.CreateSuccessResponseModel("删除成功");
+ }
+ catch (Exception ex)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
+ }
+ }
+
+ #endregion
+
+ #region 管理员获取完整数据
+ internal async Task>> GetAllMessageOptionsByKey(int category, string optionsKey, long userId)
+ {
+ try
+ {
+ bool isAdminOrSuperAdmin = await _userBasicDao.CheckUserIsAdminOrSuperAdmin(userId);
+ // 判断用户是不是管理员
+ if (!isAdminOrSuperAdmin)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.NotPermissionAction);
+ }
+ // 判断分类是不是在对应的enum里面
+ if (!Enum.IsDefined(typeof(OptionCategory), category))
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.ParameterError, "该分类不存在");
+ }
+
+ Options? options = await _context.Options.FirstOrDefaultAsync(x => x.Key == optionsKey && (OptionCategory)category == x.Category) ?? throw new Exception("数据不存在");
+
+ OptionSimpleDto optionSimpleDto = new()
+ {
+ Key = options.Key,
+ Value = options.Value,
+ Type = options.Type,
+ Category = options.Category,
+ RoleNames = options.RoleIds.Select(x => _roleManager.Roles.FirstOrDefault(r => r.Id == x)).Where(r => r != null).Select(r => r.Name).ToList()
+ };
+ // 不需要权限 直接返回
+ return APIResponseModel.CreateSuccessResponseModel(optionSimpleDto);
+
+
+ }
+ catch (Exception ex)
+ {
+ return APIResponseModel.CreateErrorResponseModel(ResponseCode.SystemError, ex.Message);
+ }
+ }
+ #endregion
+
}
}
diff --git a/LMS.service/Service/UserService/LoginService.cs b/LMS.service/Service/UserService/LoginService.cs
index 17f2174..c03e62d 100644
--- a/LMS.service/Service/UserService/LoginService.cs
+++ b/LMS.service/Service/UserService/LoginService.cs
@@ -63,9 +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);
+ //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 eca1a1c..604b119 100644
--- a/LMS.service/appsettings.json
+++ b/LMS.service/appsettings.json
@@ -68,6 +68,6 @@
}
]
},
- "Version": "1.0.9",
+ "Version": "1.1.0",
"AllowedHosts": "*"
}