😎1、调整代码生成 2、用户管理增加token黑名单 3、获取角色列表排除禁用的 4、升级依赖
This commit is contained in:
parent
b0bfe08ac8
commit
fc2b3ee500
@ -18,9 +18,9 @@
|
|||||||
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
|
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
|
||||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||||
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.15.10" />
|
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.15.10" />
|
||||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.5.16" />
|
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.5.17" />
|
||||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.5.16" />
|
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.5.17" />
|
||||||
<PackageReference Include="Furion.Pure" Version="4.9.5.16" />
|
<PackageReference Include="Furion.Pure" Version="4.9.5.17" />
|
||||||
<PackageReference Include="Hardware.Info" Version="101.0.0" />
|
<PackageReference Include="Hardware.Info" Version="101.0.0" />
|
||||||
<PackageReference Include="Hashids.net" Version="1.7.0" />
|
<PackageReference Include="Hashids.net" Version="1.7.0" />
|
||||||
<PackageReference Include="IPTools.China" Version="1.6.0" />
|
<PackageReference Include="IPTools.China" Version="1.6.0" />
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.169" />
|
<PackageReference Include="SqlSugarCore" Version="5.1.4.169" />
|
||||||
<PackageReference Include="SSH.NET" Version="2024.1.0" />
|
<PackageReference Include="SSH.NET" Version="2024.1.0" />
|
||||||
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.6" />
|
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.6" />
|
||||||
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1108" />
|
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1109" />
|
||||||
<PackageReference Include="UAParser" Version="3.1.47" />
|
<PackageReference Include="UAParser" Version="3.1.47" />
|
||||||
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
|
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -60,7 +60,7 @@
|
|||||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
|
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
|
||||||
<PackageReference Include="AspNet.Security.OAuth.Gitee" Version="8.2.0" />
|
<PackageReference Include="AspNet.Security.OAuth.Gitee" Version="8.2.0" />
|
||||||
<PackageReference Include="AspNet.Security.OAuth.Weixin" Version="8.2.0" />
|
<PackageReference Include="AspNet.Security.OAuth.Weixin" Version="8.2.0" />
|
||||||
<PackageReference Include="Lazy.Captcha.Core" Version="2.0.8" />
|
<PackageReference Include="Lazy.Captcha.Core" Version="2.0.9" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.10" />
|
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.10" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="8.0.10" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="8.0.10" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.10" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.10" />
|
||||||
|
|||||||
@ -410,33 +410,36 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
|
|
||||||
var data = new CustomViewEngine(_db)
|
var data = new CustomViewEngine(_db)
|
||||||
{
|
{
|
||||||
ConfigId = input.ConfigId!,//库定位器名
|
ConfigId = input.ConfigId!, // 库定位器名
|
||||||
AuthorName = input.AuthorName!,//作者
|
AuthorName = input.AuthorName!, // 作者
|
||||||
BusName = input.BusName!,//业务名称
|
BusName = input.BusName!, // 业务名称
|
||||||
NameSpace = input.NameSpace!,//命名空间
|
NameSpace = input.NameSpace!, // 命名空间
|
||||||
ClassName = input.TableName!,//类名称
|
ClassName = input.TableName!, // 类名称
|
||||||
PagePath = input.PagePath!,//页面目录
|
PagePath = input.PagePath!, // 页面目录
|
||||||
ProjectLastName = input.NameSpace!.Split('.').Last(),//项目最后个名称,生成的时候赋值
|
ProjectLastName = input.NameSpace!.Split('.').Last(), // 项目最后个名称,生成的时候赋值
|
||||||
QueryWhetherList = queryWhetherList,//查询条件
|
QueryWhetherList = queryWhetherList, // 查询条件
|
||||||
TableField = tableFieldList,//表字段配置信息
|
TableField = tableFieldList, // 表字段配置信息
|
||||||
IsJoinTable = joinTableList.Count > 0,//是否联表
|
IsJoinTable = joinTableList.Count > 0, // 是否联表
|
||||||
IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(),//是否上传
|
IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(), // 是否上传
|
||||||
PrintType = input.PrintType!,//支持打印类型
|
PrintType = input.PrintType!, // 支持打印类型
|
||||||
PrintName = input.PrintName!,//打印模板名称
|
PrintName = input.PrintName!, // 打印模板名称
|
||||||
IsApiService = input.IsApiService,
|
IsApiService = input.IsApiService,
|
||||||
RemoteVerify = tableFieldList.Any(t => t.RemoteVerify == true),//远程验证
|
RemoteVerify = tableFieldList.Any(t => t.RemoteVerify == true), // 远程验证
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获得菜单
|
||||||
|
var menuList = await GetMenus(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
|
||||||
|
if (input.GenerateMenu)
|
||||||
|
{
|
||||||
|
await AddMenu(menuList, input.MenuPid ?? 0); // 添加菜单
|
||||||
|
}
|
||||||
|
|
||||||
// 模板
|
// 模板
|
||||||
var templateList = GetTemplateList(input);
|
var templateList = GetTemplateList(input);
|
||||||
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
|
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
|
||||||
|
|
||||||
// 获得菜单
|
|
||||||
var menuList = await GetMenus(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
|
|
||||||
|
|
||||||
for (var i = 0; i < templateList.Count; i++)
|
for (var i = 0; i < templateList.Count; i++)
|
||||||
{
|
{
|
||||||
string tResult = string.Empty;//模板生成结果
|
string tResult = string.Empty; // 模板生成结果
|
||||||
|
|
||||||
var templateFilePath = Path.Combine(templatePath, templateList[i].Name);
|
var templateFilePath = Path.Combine(templatePath, templateList[i].Name);
|
||||||
if (!File.Exists(templateFilePath)) continue;
|
if (!File.Exists(templateFilePath)) continue;
|
||||||
@ -444,15 +447,15 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
|
|
||||||
if (templateList[i].Type == CodeGenTypeEnum.SeedData)
|
if (templateList[i].Type == CodeGenTypeEnum.SeedData)
|
||||||
{
|
{
|
||||||
//种子模板
|
// 种子模板
|
||||||
var seedData = new
|
var seedData = new
|
||||||
{
|
{
|
||||||
AuthorName = input.AuthorName!,//作者
|
AuthorName = input.AuthorName!, // 作者
|
||||||
BusName = input.BusName!,//业务名称
|
BusName = input.BusName!, // 业务名称
|
||||||
NameSpace = input.NameSpace!,//命名空间
|
NameSpace = input.NameSpace!, // 命名空间
|
||||||
ClassName = input.TableName!,//类名称
|
ClassName = input.TableName!, // 类名称
|
||||||
input.ConfigId,
|
input.ConfigId,
|
||||||
MenuList = menuList,//菜单集合
|
MenuList = menuList, // 菜单集合
|
||||||
};
|
};
|
||||||
tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
|
tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
|
||||||
{
|
{
|
||||||
@ -497,24 +500,17 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
Directory.CreateDirectory(dirPath);
|
Directory.CreateDirectory(dirPath);
|
||||||
File.WriteAllText(targetFile, tResult, Encoding.UTF8);
|
File.WriteAllText(targetFile, tResult, Encoding.UTF8);
|
||||||
}
|
}
|
||||||
if (input.GenerateMenu)
|
|
||||||
{
|
|
||||||
//添加菜单
|
|
||||||
await AddMenu(menuList, input.MenuPid ?? 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 非ZIP压缩返回空
|
// 非ZIP压缩返回空
|
||||||
if (!input.GenerateType.StartsWith('1'))
|
if (!input.GenerateType.StartsWith('1'))
|
||||||
return null;
|
return null;
|
||||||
else
|
|
||||||
{
|
var downloadPath = outputPath + ".zip";
|
||||||
string downloadPath = outputPath + ".zip";
|
// 判断是否存在同名称文件
|
||||||
// 判断是否存在同名称文件
|
if (File.Exists(downloadPath))
|
||||||
if (File.Exists(downloadPath))
|
File.Delete(downloadPath);
|
||||||
File.Delete(downloadPath);
|
ZipFile.CreateFromDirectory(outputPath, downloadPath);
|
||||||
ZipFile.CreateFromDirectory(outputPath, downloadPath);
|
return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/codeGen/{input.TableName}.zip" };
|
||||||
return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/codeGen/{input.TableName}.zip" };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -556,21 +552,21 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
|
|
||||||
var data = new CustomViewEngine(_db)
|
var data = new CustomViewEngine(_db)
|
||||||
{
|
{
|
||||||
ConfigId = input.ConfigId!,//库定位器名
|
ConfigId = input.ConfigId!, // 库定位器名
|
||||||
AuthorName = input.AuthorName!,//作者
|
AuthorName = input.AuthorName!, // 作者
|
||||||
BusName = input.BusName!,//业务名称
|
BusName = input.BusName!, // 业务名称
|
||||||
NameSpace = input.NameSpace!,//命名空间
|
NameSpace = input.NameSpace!, // 命名空间
|
||||||
ClassName = input.TableName!,//类名称
|
ClassName = input.TableName!, // 类名称
|
||||||
PagePath = input.PagePath!,//页面目录
|
PagePath = input.PagePath!, // 页面目录
|
||||||
ProjectLastName = input.NameSpace!.Split('.').Last(),//项目最后个名称,生成的时候赋值
|
ProjectLastName = input.NameSpace!.Split('.').Last(), // 项目最后个名称,生成的时候赋值
|
||||||
QueryWhetherList = queryWhetherList,//查询条件
|
QueryWhetherList = queryWhetherList, // 查询条件
|
||||||
TableField = tableFieldList,//表字段配置信息
|
TableField = tableFieldList, // 表字段配置信息
|
||||||
IsJoinTable = joinTableList.Count > 0,//是否联表
|
IsJoinTable = joinTableList.Count > 0,//是否联表
|
||||||
IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(),//是否上传
|
IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(), // 是否上传
|
||||||
PrintType = input.PrintType!,//支持打印类型
|
PrintType = input.PrintType!, // 支持打印类型
|
||||||
PrintName = input.PrintName!,//打印模板名称
|
PrintName = input.PrintName!, // 打印模板名称
|
||||||
IsApiService = input.IsApiService,
|
IsApiService = input.IsApiService,
|
||||||
RemoteVerify = tableFieldList.Any(t => t.RemoteVerify == true)//远程验证
|
RemoteVerify = tableFieldList.Any(t => t.RemoteVerify == true) // 远程验证
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取模板文件并替换
|
// 获取模板文件并替换
|
||||||
@ -580,7 +576,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
var result = new Dictionary<string, string>();
|
var result = new Dictionary<string, string>();
|
||||||
for (var i = 0; i < templateList.Count; i++)
|
for (var i = 0; i < templateList.Count; i++)
|
||||||
{
|
{
|
||||||
string tResult = string.Empty;//模板生成结果
|
string tResult = string.Empty; // 模板生成结果
|
||||||
|
|
||||||
var templateFilePath = Path.Combine(templatePath, templateList[i].Name);
|
var templateFilePath = Path.Combine(templatePath, templateList[i].Name);
|
||||||
if (!File.Exists(templateFilePath)) continue;
|
if (!File.Exists(templateFilePath)) continue;
|
||||||
@ -589,16 +585,15 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
if (templateList[i].Type == CodeGenTypeEnum.SeedData)
|
if (templateList[i].Type == CodeGenTypeEnum.SeedData)
|
||||||
{
|
{
|
||||||
// 种子模板
|
// 种子模板
|
||||||
// 获得菜单
|
|
||||||
var menuList = await GetMenus(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
|
var menuList = await GetMenus(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
|
||||||
var seedData = new
|
var seedData = new
|
||||||
{
|
{
|
||||||
AuthorName = input.AuthorName!,//作者
|
AuthorName = input.AuthorName!, // 作者
|
||||||
BusName = input.BusName!,//业务名称
|
BusName = input.BusName!, // 业务名称
|
||||||
NameSpace = input.NameSpace!,//命名空间
|
NameSpace = input.NameSpace!, // 命名空间
|
||||||
ClassName = input.TableName!,//类名称
|
ClassName = input.TableName!, // 类名称
|
||||||
input.ConfigId,
|
input.ConfigId,
|
||||||
MenuList = menuList,//菜单集合
|
MenuList = menuList, // 菜单集合
|
||||||
};
|
};
|
||||||
tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
|
tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
|
||||||
{
|
{
|
||||||
@ -661,9 +656,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
// 若 pid=0 为顶级则创建菜单目录
|
// 若 pid=0 为顶级则创建菜单目录
|
||||||
if (pid == 0)
|
if (pid == 0)
|
||||||
{
|
{
|
||||||
// 顶级目录
|
// 若已存在相同目录则删除本级和下级
|
||||||
var menuType0 = menus.Where(u => u.Type == MenuTypeEnum.Dir && u.Pid == 0).FirstOrDefault();
|
var menuType0 = menus.Where(u => u.Type == MenuTypeEnum.Dir && u.Pid == 0).FirstOrDefault();
|
||||||
// 若先前存在则删除本级和下级
|
|
||||||
var menuList0 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType0.Title && u.Type == menuType0.Type).ToListAsync();
|
var menuList0 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType0.Title && u.Type == menuType0.Type).ToListAsync();
|
||||||
if (menuList0.Count > 0)
|
if (menuList0.Count > 0)
|
||||||
{
|
{
|
||||||
@ -678,12 +672,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
|
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
|
||||||
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
|
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
await _db.Insertable(menuType0).ExecuteReturnEntityAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 菜单
|
// 若已存在相同菜单则删除本级和下级
|
||||||
var menuType = menus.Where(u => u.Type == MenuTypeEnum.Menu).FirstOrDefault();
|
var menuType = menus.Where(u => u.Type == MenuTypeEnum.Menu).FirstOrDefault();
|
||||||
// 若先前存在则删除本级和下级
|
|
||||||
var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync();
|
var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync();
|
||||||
if (menuListCurrent.Count > 0)
|
if (menuListCurrent.Count > 0)
|
||||||
{
|
{
|
||||||
@ -698,6 +690,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
|
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
|
||||||
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
|
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
await _db.Insertable(menus).ExecuteCommandAsync();
|
await _db.Insertable(menus).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -716,7 +709,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
var pPath = string.Empty;
|
var pPath = string.Empty;
|
||||||
// 若 pid=0 为顶级则创建菜单目录
|
// 若 pid=0 为顶级则创建菜单目录
|
||||||
SysMenu menuType0 = null;
|
SysMenu menuType0 = null;
|
||||||
long tempPid = pid;//暂存原始pid
|
long tempPid = pid;
|
||||||
if (pid == 0)
|
if (pid == 0)
|
||||||
{
|
{
|
||||||
// 目录
|
// 目录
|
||||||
@ -727,8 +720,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
Title = busName + "管理",
|
Title = busName + "管理",
|
||||||
Type = MenuTypeEnum.Dir,
|
Type = MenuTypeEnum.Dir,
|
||||||
Icon = "robot",
|
Icon = "robot",
|
||||||
Path = "/" + className.ToLower() + "/dir",
|
Path = "/" + className.ToLower(),
|
||||||
Name = className[..1].ToLower() + className[1..] + "Dir",
|
Name = className[..1].ToLower() + className[1..],
|
||||||
Component = "Layout",
|
Component = "Layout",
|
||||||
OrderNo = 100,
|
OrderNo = 100,
|
||||||
CreateTime = DateTime.Now
|
CreateTime = DateTime.Now
|
||||||
@ -915,7 +908,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|||||||
menuList.Insert(0, menuType);
|
menuList.Insert(0, menuType);
|
||||||
if (tempPid == 0)
|
if (tempPid == 0)
|
||||||
{
|
{
|
||||||
//顶级目录需要添加目录本身
|
// 顶级目录需要添加目录本身
|
||||||
menuList.Insert(0, menuType0);
|
menuList.Insert(0, menuType0);
|
||||||
}
|
}
|
||||||
return menuList;
|
return menuList;
|
||||||
|
|||||||
@ -79,6 +79,7 @@ public class SysRoleService : IDynamicApiController, ITransient
|
|||||||
return await _sysRoleRep.AsQueryable()
|
return await _sysRoleRep.AsQueryable()
|
||||||
.WhereIF(!_userManager.SuperAdmin, u => u.TenantId == _userManager.TenantId) // 若非超管,则只能操作本租户的角色
|
.WhereIF(!_userManager.SuperAdmin, u => u.TenantId == _userManager.TenantId) // 若非超管,则只能操作本租户的角色
|
||||||
.WhereIF(!_userManager.SuperAdmin && !_userManager.SysAdmin, u => u.CreateUserId == _userManager.UserId || roleIdList.Contains(u.Id)) // 若非超管且非系统管理员,则只显示自己创建和已拥有的角色
|
.WhereIF(!_userManager.SuperAdmin && !_userManager.SysAdmin, u => u.CreateUserId == _userManager.UserId || roleIdList.Contains(u.Id)) // 若非超管且非系统管理员,则只显示自己创建和已拥有的角色
|
||||||
|
.Where(u => u.Status != StatusEnum.Disable) // 非禁用的
|
||||||
.OrderBy(u => new { u.OrderNo, u.Id }).Select(u => new RoleOutput { Disabled = false }, true).ToListAsync();
|
.OrderBy(u => new { u.OrderNo, u.Id }).Select(u => new RoleOutput { Disabled = false }, true).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -182,8 +182,8 @@ public class SysUserService : IDynamicApiController, ITransient
|
|||||||
if (isOpenAccessUser)
|
if (isOpenAccessUser)
|
||||||
throw Oops.Oh(ErrorCodeEnum.D1030);
|
throw Oops.Oh(ErrorCodeEnum.D1030);
|
||||||
|
|
||||||
// 强制下线
|
// 设置账号Token黑名单
|
||||||
await _sysOnlineUserService.ForceOffline(user.Id);
|
await SetUserBalckList(user, StatusEnum.Disable);
|
||||||
|
|
||||||
await _sysUserRep.DeleteAsync(user);
|
await _sysUserRep.DeleteAsync(user);
|
||||||
|
|
||||||
@ -237,22 +237,33 @@ public class SysUserService : IDynamicApiController, ITransient
|
|||||||
if (!Enum.IsDefined(typeof(StatusEnum), input.Status))
|
if (!Enum.IsDefined(typeof(StatusEnum), input.Status))
|
||||||
throw Oops.Oh(ErrorCodeEnum.D3005);
|
throw Oops.Oh(ErrorCodeEnum.D3005);
|
||||||
|
|
||||||
|
// 设置账号Token黑名单
|
||||||
|
await SetUserBalckList(user, input.Status);
|
||||||
|
|
||||||
|
user.Status = input.Status;
|
||||||
|
return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new { u.Status }).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置账号Token黑名单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user"></param>
|
||||||
|
/// <param name="status"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[NonAction]
|
||||||
|
private async Task SetUserBalckList(SysUser user, StatusEnum status)
|
||||||
|
{
|
||||||
// 账号禁用则增加黑名单,账号启用则移除黑名单
|
// 账号禁用则增加黑名单,账号启用则移除黑名单
|
||||||
var sysCacheService = App.GetRequiredService<SysCacheService>();
|
var sysCacheService = App.GetRequiredService<SysCacheService>();
|
||||||
if (input.Status == StatusEnum.Disable)
|
if (status != StatusEnum.Enable)
|
||||||
{
|
{
|
||||||
sysCacheService.Set($"{CacheConst.KeyBlacklist}{user.Id}", $"{user.RealName}-{user.Phone}");
|
sysCacheService.Set($"{CacheConst.KeyBlacklist}{user.Id}", $"{user.RealName}-{user.Phone}");
|
||||||
|
await _sysOnlineUserService.ForceOffline(user.Id); // 强制账号下线
|
||||||
// 强制下线
|
|
||||||
await _sysOnlineUserService.ForceOffline(user.Id);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sysCacheService.Remove($"{CacheConst.KeyBlacklist}{user.Id}");
|
sysCacheService.Remove($"{CacheConst.KeyBlacklist}{user.Id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
user.Status = input.Status;
|
|
||||||
return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new { u.Status }).ExecuteCommandAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"name": "admin.net.pro",
|
"name": "admin.net.pro",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "2.4.33",
|
"version": "2.4.33",
|
||||||
"lastBuildTime": "2024.10.20",
|
"lastBuildTime": "2024.10.21",
|
||||||
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
|
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
|
||||||
"author": "zuohuaijun",
|
"author": "zuohuaijun",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -42,7 +42,7 @@
|
|||||||
"jsplumb": "^2.15.6",
|
"jsplumb": "^2.15.6",
|
||||||
"jwchat": "^2.0.3",
|
"jwchat": "^2.0.3",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"md-editor-v3": "^4.21.0",
|
"md-editor-v3": "^4.21.1",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"monaco-editor": "^0.52.0",
|
"monaco-editor": "^0.52.0",
|
||||||
"mqtt": "^5.10.1",
|
"mqtt": "^5.10.1",
|
||||||
@ -71,7 +71,7 @@
|
|||||||
"vue-router": "^4.4.5",
|
"vue-router": "^4.4.5",
|
||||||
"vue-signature-pad": "^3.0.2",
|
"vue-signature-pad": "^3.0.2",
|
||||||
"vue3-tree-org": "^4.2.2",
|
"vue3-tree-org": "^4.2.2",
|
||||||
"vxe-pc-ui": "^4.2.24",
|
"vxe-pc-ui": "^4.2.26",
|
||||||
"vxe-table": "^4.7.59",
|
"vxe-table": "^4.7.59",
|
||||||
"vxe-table-plugin-element": "^4.0.4",
|
"vxe-table-plugin-element": "^4.0.4",
|
||||||
"vxe-table-plugin-export-xlsx": "^4.0.7",
|
"vxe-table-plugin-export-xlsx": "^4.0.7",
|
||||||
|
|||||||
@ -96,7 +96,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
|
|||||||
...(JSON.parse(env.VITE_OPEN_CDN) ? { external: buildConfig.external } : {}),
|
...(JSON.parse(env.VITE_OPEN_CDN) ? { external: buildConfig.external } : {}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
css: { preprocessorOptions: { css: { charset: false }, scss: { silenceDeprecations: ['legacy-js-api'] } } },
|
css: { preprocessorOptions: { css: { charset: false }, scss: { silenceDeprecations: ['legacy-js-api', 'global-builtin', 'fs-importer-cwd', 'import'] } } },
|
||||||
define: {
|
define: {
|
||||||
__VUE_I18N_LEGACY_API__: JSON.stringify(false),
|
__VUE_I18N_LEGACY_API__: JSON.stringify(false),
|
||||||
__VUE_I18N_FULL_INSTALL__: JSON.stringify(false),
|
__VUE_I18N_FULL_INSTALL__: JSON.stringify(false),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user