Bläddra i källkod

🤓1、优化权限效验逻辑 2、统一JSON序列化 3、升级Furion v4.8.6.8 4、其他调整

zuohuaijun 3 år sedan
förälder
incheckning
b57ba905a7

+ 1 - 1
Admin.NET/Admin.NET.Application/Configuration/App.json

@@ -10,7 +10,7 @@
         "InjectSpecificationDocument": true // 生产环境是否开启Swagger
     },
     "DynamicApiControllerSettings": {
-        "DefaultRoutePrefix": "api", // 默认路由前缀
+        //"DefaultRoutePrefix": "api", // 默认路由前缀
         "CamelCaseSeparator": "", // 骆驼(驼峰)/帕斯卡命名分隔符
         "LowercaseRoute": false, // 小写路由格式
         "AsLowerCamelCase": true // 启用小驼峰命名(首字母小写)

+ 3 - 3
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -20,9 +20,9 @@
     <PackageReference Include="DotNetCore.Compile.Environment" Version="3.2.0" />
     <PackageReference Include="DotNetCore.Natasha.CSharp" Version="5.0.2" />
     <PackageReference Include="FluentEmail.Smtp" Version="3.0.2" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.6.6" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.6.6" />
-    <PackageReference Include="Furion.Pure" Version="4.8.6.6" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.6.8" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.6.8" />
+    <PackageReference Include="Furion.Pure" Version="4.8.6.8" />
     <PackageReference Include="IPTools.China" Version="1.6.0" />
     <PackageReference Include="Lazy.Captcha.Core" Version="2.0.1" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.7.4.2" />

+ 4 - 9
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -3483,11 +3483,6 @@
             <typeparam name="T"></typeparam>
             <returns></returns>
         </member>
-        <member name="T:Admin.NET.Core.ResultFilter">
-            <summary>
-            结果筛选器
-            </summary>
-        </member>
         <member name="M:Admin.NET.Core.IOnlineUserHub.OnlineUserList(Admin.NET.Core.OnlineUserList)">
             <summary>
             在线用户列表
@@ -6043,15 +6038,15 @@
             </summary>
             <param name="menu"></param>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysMenuService.GetBtnPermissionList">
+        <member name="M:Admin.NET.Core.Service.SysMenuService.GetOwnBtnPermList">
             <summary>
-            获取按钮权限集合
+            获取用户拥有按钮权限集合(缓存)
             </summary>
             <returns></returns>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysMenuService.GetAllBtnList">
+        <member name="M:Admin.NET.Core.Service.SysMenuService.GetAllBtnPermList">
             <summary>
-            获取所有按钮权限集合
+            获取系统所有按钮权限集合(缓存)
             </summary>
             <returns></returns>
         </member>

+ 0 - 35
Admin.NET/Admin.NET.Core/Filter/ResultFilter.cs

@@ -1,35 +0,0 @@
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 结果筛选器
-/// </summary>
-public class ResultFilter : IAsyncResultFilter
-{
-    // 脱敏验证处理器
-    private readonly ISensitiveDetectionProvider _sensitiveDetectionProvider;
-
-    public ResultFilter(ISensitiveDetectionProvider sensitiveDetectionProvider)
-    {
-        _sensitiveDetectionProvider = sensitiveDetectionProvider;
-    }
-
-    public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
-    {
-        // 是否开启全局脱敏显示处理
-        if (CommonConst.SysSensitiveDetection)
-        {
-            var resStr = context.Result?.GetType() == typeof(JsonResult) ? JSON.Serialize(context.Result) : string.Empty;
-            if (!string.IsNullOrWhiteSpace(resStr))
-            {
-                resStr = await _sensitiveDetectionProvider.ReplaceAsync(resStr, '*');
-                // 强制替换结果
-                context.Result = new ContentResult
-                {
-                    Content = resStr
-                };
-            }
-        }
-
-        await next();
-    }
-}

+ 5 - 5
Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs

@@ -20,7 +20,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter
     public async void Write(LogMessage logMsg, bool flush)
     {
         var jsonStr = logMsg.Context.Get("loggingMonitor").ToString();
-        dynamic loggingMonitor = JsonConvert.DeserializeObject(jsonStr);
+        var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);
 
         // 不记录数据校验日志
         if (loggingMonitor.Validation != null) return;
@@ -87,12 +87,12 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter
                 RealName = realName,
                 HttpMethod = loggingMonitor.httpMethod,
                 RequestUrl = loggingMonitor.requestUrl,
-                RequestParam = (loggingMonitor.parameters == null || loggingMonitor.parameters.Count == 0) ? null : JsonConvert.SerializeObject(loggingMonitor.parameters[0].value),
-                ReturnResult = JsonConvert.SerializeObject(loggingMonitor.returnInformation.value),
+                RequestParam = (loggingMonitor.parameters == null || loggingMonitor.parameters.Count == 0) ? null : JSON.Serialize(loggingMonitor.parameters[0].value),
+                ReturnResult = JSON.Serialize(loggingMonitor.returnInformation.value),
                 EventId = logMsg.EventId.Id,
                 ThreadId = logMsg.ThreadId,
                 TraceId = logMsg.TraceId,
-                Exception = (loggingMonitor.exception == null ) ? null : JsonConvert.SerializeObject(loggingMonitor.exception.value),
+                Exception = (loggingMonitor.exception == null) ? null : JSON.Serialize(loggingMonitor.exception.value),
                 Message = logMsg.Message,
                 CreateUserId = string.IsNullOrWhiteSpace(userId) ? 0 : long.Parse(userId),
                 TenantId = string.IsNullOrWhiteSpace(tenantId) ? 0 : long.Parse(tenantId)
@@ -101,7 +101,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter
 
         // 异常时发送邮件
         if (logMsg.Exception != null)
-            await App.GetRequiredService<SysMessageService>().SendEmail(loggingMonitor.exception);
+            await App.GetRequiredService<SysMessageService>().SendEmail(JSON.Serialize(loggingMonitor.exception.value));
     }
 
     /// <summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Logging/ElasticSearchLoggingWriter.cs

@@ -17,7 +17,7 @@ public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter
     public void Write(LogMessage logMsg, bool flush)
     {
         var jsonStr = logMsg.Context.Get("loggingMonitor").ToString();
-        // dynamic loggingMonitor = JsonConvert.DeserializeObject(jsonStr);
+        // var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);
         _esClient.IndexDocument(jsonStr);
     }
 }

+ 19 - 17
Admin.NET/Admin.NET.Core/SeedData/SysMenuSeedData.cs

@@ -31,8 +31,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000117, Pid=1310000000111, Title="授权角色", Permission="sysUser:grantRole", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000118, Pid=1310000000111, Title="重置密码", Permission="sysUser:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000119, Pid=1310000000111, Title="设置状态", Permission="sysUser:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000120, Pid=1310000000111, Title="修改密码", Permission="sysUser:changePwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000121, Pid=1310000000111, Title="强制下线", Permission="sysUser:forceOffline", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000120, Pid=1310000000111, Title="强制下线", Permission="sysOnlineUser:forceOffline", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000131, Pid=1310000000101, Title="角色管理", Path="/system/role", Name="sysRole", Component="/system/role/index", Icon="ele-Help", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 },
             new SysMenu{ Id=1310000000132, Pid=1310000000131, Title="查询", Permission="sysRole:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
@@ -40,7 +39,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000134, Pid=1310000000131, Title="增加", Permission="sysRole:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000135, Pid=1310000000131, Title="删除", Permission="sysRole:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000136, Pid=1310000000131, Title="授权菜单", Permission="sysRole:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000137, Pid=1310000000131, Title="授权数据", Permission="sysRole:grantData", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000137, Pid=1310000000131, Title="授权数据", Permission="sysRole:grantDataScope", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000138, Pid=1310000000131, Title="设置状态", Permission="sysRole:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000141, Pid=1310000000101, Title="机构管理", Path="/system/org", Name="sysOrg", Component="/system/org/index", Icon="ele-OfficeBuilding", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=120 },
@@ -57,8 +56,9 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
 
             new SysMenu{ Id=1310000000161, Pid=1310000000101, Title="个人中心", Path="/system/userCenter", Name="sysUserCenter", Component="/system/user/component/userCenter",Icon="ele-Medal", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 },
             new SysMenu{ Id=1310000000162, Pid=1310000000161, Title="修改密码", Permission="sysUser:changePwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000163, Pid=1310000000161, Title="更新信息", Permission="sysUser:updateBase", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000164, Pid=1310000000161, Title="电子签名", Permission="sysUser:signature", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000163, Pid=1310000000161, Title="基本信息", Permission="sysUser:baseInfo", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000164, Pid=1310000000161, Title="电子签名", Permission="sysFile:uploadSignature", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000165, Pid=1310000000161, Title="上传头像", Permission="sysFile:uploadAvatar", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000171, Pid=1310000000101, Title="通知公告", Path="/system/notice", Name="sysNotice", Component="/system/notice/index",Icon="ele-Bell", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 },
             new SysMenu{ Id=1310000000172, Pid=1310000000171, Title="查询", Permission="sysNotice:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
@@ -69,9 +69,10 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000177, Pid=1310000000171, Title="撤回", Permission="sysNotice:cancel", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000181, Pid=1310000000101, Title="三方账号", Path="/system/weChatUser", Name="weChatUser", Component="/system/weChatUser/index",Icon="ele-ChatDotRound", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=160 },
-            new SysMenu{ Id=1310000000182, Pid=1310000000181, Title="查询", Permission="weChatUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000183, Pid=1310000000181, Title="编辑", Permission="weChatUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000184, Pid=1310000000181, Title="删除", Permission="weChatUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000182, Pid=1310000000181, Title="查询", Permission="sysWechatUser:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000183, Pid=1310000000181, Title="编辑", Permission="sysWechatUser:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000184, Pid=1310000000181, Title="增加", Permission="sysWechatUser:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000185, Pid=1310000000181, Title="删除", Permission="sysWechatUser:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000301, Pid=0, Title="平台管理", Path="/platform", Name="platform", Component="Layout", Redirect="/platform/tenant", Icon="ele-Menu", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=1100 },
 
@@ -83,6 +84,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000316, Pid=1310000000311, Title="授权菜单", Permission="sysTenant:grantMenu", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000317, Pid=1310000000311, Title="重置密码", Permission="sysTenant:resetPwd", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000318, Pid=1310000000311, Title="生成库", Permission="sysTenant:createDb", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000319, Pid=1310000000131, Title="设置状态", Permission="sysTenant:setStatus", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000321, Pid=1310000000301, Title="菜单管理", Path="/platform/menu", Name="sysMenu", Component="/system/menu/index", Icon="ele-Menu", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 },
             new SysMenu{ Id=1310000000322, Pid=1310000000321, Title="查询", Permission="sysMenu:list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
@@ -103,10 +105,10 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000345, Pid=1310000000341, Title="删除", Permission="sysDictType:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000351, Pid=1310000000301, Title="任务调度", Path="/platform/job", Name="sysJob", Component="/system/job/index", Icon="ele-AlarmClock", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 },
-            new SysMenu{ Id=1310000000352, Pid=1310000000351, Title="查询", Permission="sysJob:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000353, Pid=1310000000351, Title="编辑", Permission="sysJob:update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000354, Pid=1310000000351, Title="增加", Permission="sysJob:add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000355, Pid=1310000000351, Title="删除", Permission="sysJob:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000352, Pid=1310000000351, Title="查询", Permission="sysJob:pageJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000353, Pid=1310000000351, Title="编辑", Permission="sysJob:updateJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000354, Pid=1310000000351, Title="增加", Permission="sysJob:addJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000355, Pid=1310000000351, Title="删除", Permission="sysJob:deleteJobDetail", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000361, Pid=1310000000301, Title="系统监控", Path="/platform/server", Name="sysServer", Component="/system/server/index", Icon="ele-Monitor", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=150 },
 
@@ -123,8 +125,8 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
 
             new SysMenu{ Id=1310000000391, Pid=1310000000301, Title="文件管理", Path="/platform/file", Name="sysFile", Component="/system/file/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=180 },
             new SysMenu{ Id=1310000000392, Pid=1310000000391, Title="查询", Permission="sysFile:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000393, Pid=1310000000391, Title="上传", Permission="sysFile:upload", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000394, Pid=1310000000391, Title="下载", Permission="sysFile:download", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000393, Pid=1310000000391, Title="上传", Permission="sysFile:uploadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000394, Pid=1310000000391, Title="下载", Permission="sysFile:downloadFile", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000395, Pid=1310000000391, Title="删除", Permission="sysFile:delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000501, Pid=0, Title="日志管理", Path="/log", Name="log", Component="Layout", Redirect="/log/vislog", Icon="ele-DocumentCopy", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=1200 },
@@ -135,9 +137,9 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
             new SysMenu{ Id=1310000000522, Pid=1310000000521, Title="查询", Permission="sysOplog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000523, Pid=1310000000521, Title="清空", Permission="sysOplog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
             new SysMenu{ Id=1310000000524, Pid=1310000000521, Title="导出", Permission="sysOplog:export", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000541, Pid=1310000000501, Title="差异日志", Path="/log/difflog", Name="sysDifflog", Component="/system/log/difflog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 },
-            new SysMenu{ Id=1310000000542, Pid=1310000000541, Title="查询", Permission="sysDifflog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
-            new SysMenu{ Id=1310000000543, Pid=1310000000541, Title="清空", Permission="sysDifflog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000531, Pid=1310000000501, Title="差异日志", Path="/log/difflog", Name="sysDifflog", Component="/system/log/difflog/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 },
+            new SysMenu{ Id=1310000000532, Pid=1310000000531, Title="查询", Permission="sysDifflog:page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
+            new SysMenu{ Id=1310000000533, Pid=1310000000531, Title="清空", Permission="sysDifflog:clear", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
 
             new SysMenu{ Id=1310000000601, Pid=0, Title="开发工具", Path="/develop", Name="develop", Component="Layout", Redirect="/develop/database", Icon="ele-Cpu", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=1300 },
             new SysMenu{ Id=1310000000611, Pid=1310000000601, Title="库表管理", Path="/develop/database", Name="sysDatabase", Component="/system/database/index",Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },

+ 10 - 3
Admin.NET/Admin.NET.Core/SeedData/SysRoleMenuSeedData.cs

@@ -32,7 +32,6 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000128, RoleId=1300000000101, MenuId=1310000000118 },
             new SysRoleMenu{ Id=1300000000129, RoleId=1300000000101, MenuId=1310000000119 },
             new SysRoleMenu{ Id=1300000000130, RoleId=1300000000101, MenuId=1310000000120 },
-            new SysRoleMenu{ Id=1300000000131, RoleId=1300000000101, MenuId=1310000000121 },
             // 角色管理
             new SysRoleMenu{ Id=1300000000141, RoleId=1300000000101, MenuId=1310000000131 },
             new SysRoleMenu{ Id=1300000000142, RoleId=1300000000101, MenuId=1310000000132 },
@@ -59,6 +58,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000172, RoleId=1300000000101, MenuId=1310000000162 },
             new SysRoleMenu{ Id=1300000000173, RoleId=1300000000101, MenuId=1310000000163 },
             new SysRoleMenu{ Id=1300000000174, RoleId=1300000000101, MenuId=1310000000164 },
+            new SysRoleMenu{ Id=1300000000175, RoleId=1300000000101, MenuId=1310000000165 },
             // 通知公告
             new SysRoleMenu{ Id=1300000000181, RoleId=1300000000101, MenuId=1310000000171 },
             new SysRoleMenu{ Id=1300000000182, RoleId=1300000000101, MenuId=1310000000172 },
@@ -72,6 +72,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000192, RoleId=1300000000101, MenuId=1310000000182 },
             new SysRoleMenu{ Id=1300000000193, RoleId=1300000000101, MenuId=1310000000183 },
             new SysRoleMenu{ Id=1300000000194, RoleId=1300000000101, MenuId=1310000000184 },
+            new SysRoleMenu{ Id=1300000000195, RoleId=1300000000101, MenuId=1310000000185 },
 
             //// 平台管理
             //new SysRoleMenu{ Id=1300000000201, RoleId=1300000000101, MenuId=1310000000301 },
@@ -105,12 +106,14 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             //new SysRoleMenu{ Id=1300000000301, RoleId=1300000000101, MenuId=1310000000501 },
             new SysRoleMenu{ Id=1300000000311, RoleId=1300000000101, MenuId=1310000000511 },
             new SysRoleMenu{ Id=1300000000312, RoleId=1300000000101, MenuId=1310000000512 },
+            new SysRoleMenu{ Id=1300000000313, RoleId=1300000000101, MenuId=1310000000513 },
             new SysRoleMenu{ Id=1300000000321, RoleId=1300000000101, MenuId=1310000000521 },
             new SysRoleMenu{ Id=1300000000322, RoleId=1300000000101, MenuId=1310000000522 },
+            new SysRoleMenu{ Id=1300000000323, RoleId=1300000000101, MenuId=1310000000523 },
+            new SysRoleMenu{ Id=1300000000324, RoleId=1300000000101, MenuId=1310000000524 },
             new SysRoleMenu{ Id=1300000000331, RoleId=1300000000101, MenuId=1310000000531 },
             new SysRoleMenu{ Id=1300000000332, RoleId=1300000000101, MenuId=1310000000532 },
-            new SysRoleMenu{ Id=1300000000341, RoleId=1300000000101, MenuId=1310000000541 },
-            new SysRoleMenu{ Id=1300000000342, RoleId=1300000000101, MenuId=1310000000542 },
+            new SysRoleMenu{ Id=1300000000333, RoleId=1300000000101, MenuId=1310000000543 },
 
             // 帮助文档
             new SysRoleMenu{ Id=1300000000401, RoleId=1300000000101, MenuId=1310000000701 },
@@ -129,6 +132,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000522, RoleId=1300000000102, MenuId=1310000000162 },
             new SysRoleMenu{ Id=1300000000523, RoleId=1300000000102, MenuId=1310000000163 },
             new SysRoleMenu{ Id=1300000000524, RoleId=1300000000102, MenuId=1310000000164 },
+            new SysRoleMenu{ Id=1300000000525, RoleId=1300000000102, MenuId=1310000000165 },
 
             // 数据面板【1300000000103】
             new SysRoleMenu{ Id=1300000000601, RoleId=1300000000103, MenuId=1300000000101 },
@@ -141,6 +145,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000622, RoleId=1300000000103, MenuId=1310000000162 },
             new SysRoleMenu{ Id=1300000000623, RoleId=1300000000103, MenuId=1310000000163 },
             new SysRoleMenu{ Id=1300000000624, RoleId=1300000000103, MenuId=1310000000164 },
+            new SysRoleMenu{ Id=1300000000625, RoleId=1300000000103, MenuId=1310000000165 },
 
             // 数据面板【1300000000104】
             new SysRoleMenu{ Id=1300000000701, RoleId=1300000000104, MenuId=1300000000101 },
@@ -153,6 +158,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000722, RoleId=1300000000104, MenuId=1310000000162 },
             new SysRoleMenu{ Id=1300000000723, RoleId=1300000000104, MenuId=1310000000163 },
             new SysRoleMenu{ Id=1300000000724, RoleId=1300000000104, MenuId=1310000000164 },
+            new SysRoleMenu{ Id=1300000000725, RoleId=1300000000104, MenuId=1310000000165 },
 
             // 数据面板【1300000000105】
             new SysRoleMenu{ Id=1300000000801, RoleId=1300000000105, MenuId=1300000000101 },
@@ -165,6 +171,7 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
             new SysRoleMenu{ Id=1300000000822, RoleId=1300000000105, MenuId=1310000000162 },
             new SysRoleMenu{ Id=1300000000823, RoleId=1300000000105, MenuId=1310000000163 },
             new SysRoleMenu{ Id=1300000000824, RoleId=1300000000105, MenuId=1310000000164 },
+            new SysRoleMenu{ Id=1300000000825, RoleId=1300000000105, MenuId=1310000000165 },
         };
     }
 }

+ 4 - 3
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -130,11 +130,12 @@ public class SysAuthService : IDynamicApiController, ITransient
         if (user == null)
             throw Oops.Oh(ErrorCodeEnum.D1011);
 
+        // 获取机构
         var org = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOrg>>().GetFirstAsync(u => u.Id == user.OrgId);
+        // 获取职位
         var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetFirstAsync(u => u.Id == user.PosId);
-
-        // 按钮权限集合
-        var buttons = await _sysMenuService.GetBtnPermissionList();
+        // 获取拥有按钮权限集合
+        var buttons = await _sysMenuService.GetOwnBtnPermList();
 
         return new LoginUserOutput
         {

+ 9 - 9
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -181,15 +181,15 @@ public class SysMenuService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 获取按钮权限集合
+    /// 获取用户拥有按钮权限集合(缓存)
     /// </summary>
     /// <returns></returns>
-    [ApiDescriptionSettings(Name = "BtnPermissionList")]
+    [ApiDescriptionSettings(Name = "OwnBtnPermList")]
     [DisplayName("获取按钮权限集合")]
-    public async Task<List<string>> GetBtnPermissionList()
+    public async Task<List<string>> GetOwnBtnPermList()
     {
         var userId = _userManager.UserId;
-        var permissions = _sysCacheService.Get<List<string>>(CacheConst.KeyPermission + userId); // 取缓存
+        var permissions = _sysCacheService.Get<List<string>>(CacheConst.KeyPermission + userId);
         if (permissions == null || permissions.Count == 0)
         {
             var menuIdList = _userManager.SuperAdmin ? new List<long>() : await GetMenuIdList();
@@ -197,25 +197,25 @@ public class SysMenuService : IDynamicApiController, ITransient
                 .Where(u => u.Type == MenuTypeEnum.Btn)
                 .WhereIF(menuIdList.Count > 0, u => menuIdList.Contains(u.Id))
                 .Select(u => u.Permission).ToListAsync();
-            _sysCacheService.Set(CacheConst.KeyPermission + userId, permissions); // 缓存结果
+            _sysCacheService.Set(CacheConst.KeyPermission + userId, permissions);
         }
         return permissions;
     }
 
     /// <summary>
-    /// 获取所有按钮权限集合
+    /// 获取系统所有按钮权限集合(缓存)
     /// </summary>
     /// <returns></returns>
     [ApiDescriptionSettings(false)]
-    public async Task<List<string>> GetAllBtnList()
+    public async Task<List<string>> GetAllBtnPermList()
     {
-        var permissions = _sysCacheService.Get<List<string>>(CacheConst.KeyPermission + 0); // 先从缓存里面读取
+        var permissions = _sysCacheService.Get<List<string>>(CacheConst.KeyPermission + 0);
         if (permissions == null || permissions.Count == 0)
         {
             permissions = await _sysMenuRep.AsQueryable()
                 .Where(u => u.Type == MenuTypeEnum.Btn)
                 .Select(u => u.Permission).ToListAsync();
-            _sysCacheService.Set(CacheConst.KeyPermission + 0, permissions); // 缓存结果
+            _sysCacheService.Set(CacheConst.KeyPermission + 0, permissions);
         }
         return permissions;
     }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -214,7 +214,7 @@ public class SysTenantService : IDynamicApiController, ITransient
 
         // 默认租户管理员角色菜单集合
         var menuIdList = new List<long> { 1300000000111,1300000000121, // 工作台
-            1310000000111,1310000000112,1310000000113,1310000000114,1310000000115,1310000000116,1310000000117,1310000000118,1310000000119,1310000000120,1310000000121, // 账号
+            1310000000111,1310000000112,1310000000113,1310000000114,1310000000115,1310000000116,1310000000117,1310000000118,1310000000119,1310000000120, // 账号
             1310000000131,1310000000132,1310000000133,1310000000134,1310000000135,1310000000136,1310000000137,1310000000138, // 角色
             1310000000141,1310000000142,1310000000143,1310000000144,1310000000145, // 机构
             1310000000151,1310000000152,1310000000153,1310000000154,1310000000155, // 职位

+ 5 - 5
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -180,20 +180,20 @@ public static class SqlSugarSetup
             var logDiff = new SysLogDiff
             {
                 // 操作后记录(字段描述、列名、值、表名、表描述)
-                AfterData = JsonConvert.SerializeObject(u.AfterData),
+                AfterData = JSON.Serialize(u.AfterData),
                 // 操作前记录(字段描述、列名、值、表名、表描述)
-                BeforeData = JsonConvert.SerializeObject(u.BeforeData),
+                BeforeData = JSON.Serialize(u.BeforeData),
                 // 传进来的对象
-                BusinessData = JsonConvert.SerializeObject(u.BusinessData),
+                BusinessData = JSON.Serialize(u.BusinessData),
                 // 枚举(insert、update、delete)
                 DiffType = u.DiffType.ToString(),
                 Sql = UtilMethods.GetSqlString(config.DbType, u.Sql, u.Parameters),
-                Parameters = JsonConvert.SerializeObject(u.Parameters),
+                Parameters = JSON.Serialize(u.Parameters),
                 Elapsed = u.Time == null ? 0 : (long)u.Time.Value.TotalMilliseconds
             };
             await db.Insertable(logDiff).ExecuteCommandAsync();
             Console.ForegroundColor = ConsoleColor.Red;
-            Console.WriteLine(DateTime.Now + $"\r\n*****差异日志开始*****\r\n{Environment.NewLine}{JsonConvert.SerializeObject(logDiff)}{Environment.NewLine}*****差异日志结束*****\r\n");
+            Console.WriteLine(DateTime.Now + $"\r\n*****差异日志开始*****\r\n{Environment.NewLine}{JSON.Serialize(logDiff)}{Environment.NewLine}*****差异日志结束*****\r\n");
         };
     }
 

+ 10 - 0
Admin.NET/Admin.NET.Core/Util/AdminResultProvider.cs

@@ -78,6 +78,16 @@ public class AdminResultProvider : IUnifyResultProvider
     /// <returns></returns>
     private static AdminResult<object> RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)
     {
+        // 统一返回值脱敏处理
+        if (data?.GetType() == typeof(String))
+        {
+            data = App.GetRequiredService<ISensitiveDetectionProvider>().ReplaceAsync(data.ToString(), '*').GetAwaiter().GetResult();
+        }
+        else if (data?.GetType() == typeof(JsonResult))
+        {
+            data = App.GetRequiredService<ISensitiveDetectionProvider>().ReplaceAsync(JSON.Serialize(data), '*').GetAwaiter().GetResult();
+        }
+
         return new AdminResult<object>
         {
             Code = statusCode,

+ 1 - 1
Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.xml

@@ -13,7 +13,7 @@
         </member>
         <member name="M:Admin.NET.Web.Core.JwtHandler.CheckAuthorzieAsync(Microsoft.AspNetCore.Http.DefaultHttpContext)">
             <summary>
-            检查权限
+            权限校验核心逻辑
             </summary>
             <param name="httpContext"></param>
             <returns></returns>

+ 10 - 23
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs

@@ -5,7 +5,6 @@ using Furion.Authorization;
 using Furion.DataEncryption;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
-using System.Collections.Generic;
 using System.Threading.Tasks;
 
 namespace Admin.NET.Web.Core
@@ -42,40 +41,28 @@ namespace Admin.NET.Web.Core
         }
 
         /// <summary>
-        /// 检查权限
+        /// 权限校验核心逻辑
         /// </summary>
         /// <param name="httpContext"></param>
         /// <returns></returns>
         private static async Task<bool> CheckAuthorzieAsync(DefaultHttpContext httpContext)
         {
-            // 第三方授权模式
-            if (App.User.FindFirst(ClaimConst.RunMode)?.Value == ((int)RunModeEnum.OpenID).ToString())
-                return true;
-
             // 排除超管
             if (App.User.FindFirst(ClaimConst.AccountType)?.Value == ((int)AccountTypeEnum.SuperAdmin).ToString())
                 return true;
 
-            // 路由名称
+            // 路由/按钮名称
             var routeName = httpContext.Request.Path.Value[1..].Replace("/", ":");
-            if (httpContext.Request.Path.StartsWithSegments("/api"))
-                routeName = httpContext.Request.Path.Value[5..].Replace("/", ":");
-
-            // 默认路由
-            var defalutRoutes = new List<string>()
-            {
-                "userInfo",  // 获取用户信息
-                "loginMenu", // 获取登录菜单
-            };
-            if (defalutRoutes.Contains(routeName)) return true;
 
-            // 获取用户权限集合(按钮或API接口)
-            var btnPermissionList = await App.GetService<SysMenuService>().GetBtnPermissionList();
-            var allBtnList = await App.GetService<SysMenuService>().GetAllBtnList();
+            // 获取用户拥有按钮权限集合
+            var ownBtnPermList = await App.GetService<SysMenuService>().GetOwnBtnPermList();
+            // 获取系统所有按钮权限集合
+            var allBtnPermList = await App.GetService<SysMenuService>().GetAllBtnPermList();
 
-            // 检查授权(菜单中没有配置按钮权限,则不限制)
-            return btnPermissionList.Exists(p => p.Equals(routeName, System.StringComparison.CurrentCultureIgnoreCase)) ||
-                allBtnList.TrueForAll(p => !p.Equals(routeName, System.StringComparison.CurrentCultureIgnoreCase));
+            // 已拥有该按钮权限或者所有按钮集合里面不存在
+            var exist1 = ownBtnPermList.Exists(u => routeName.Contains(u, System.StringComparison.CurrentCultureIgnoreCase));
+            var exist2 = allBtnPermList.TrueForAll(u => !routeName.Contains(u, System.StringComparison.CurrentCultureIgnoreCase));
+            return exist1 || exist2;
         }
     }
 }

+ 0 - 2
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -44,8 +44,6 @@ public class Startup : AppStartup
         });
         // 脱敏检测
         services.AddSensitiveDetection();
-        //// 结果拦截器
-        //services.AddMvcFilter<ResultFilter>();
         // 控制台格式化
         services.AddConsoleFormatter(options =>
         {

BIN
Admin.NET/Admin.NET.Web.Entry/ip2region.db


+ 4 - 4
Web/src/api-services/apis/sys-auth-api.ts

@@ -310,7 +310,7 @@ export const SysAuthApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 获取登录账号信息
+         * @summary 获取登录账号
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
@@ -450,7 +450,7 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 获取登录账号信息
+         * @summary 获取登录账号
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
@@ -539,7 +539,7 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
         },
         /**
          * 
-         * @summary 获取登录账号信息
+         * @summary 获取登录账号
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
@@ -632,7 +632,7 @@ export class SysAuthApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 获取登录账号信息
+     * @summary 获取登录账号
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysAuthApi

+ 60 - 60
Web/src/api-services/apis/sys-menu-api.ts

@@ -72,24 +72,27 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 获取按钮权限集合
+         * @summary 删除菜单
+         * @param {DeleteMenuInput} [body] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        apiSysMenuBtnPermissionListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysMenu/btnPermissionList`;
+        apiSysMenuDeleteDelete: async (body?: DeleteMenuInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysMenu/delete`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
             if (configuration) {
                 baseOptions = configuration.baseOptions;
             }
-            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
 
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
                 query.set(key, localVarQueryParameter[key]);
@@ -100,6 +103,8 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
                 url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
@@ -108,26 +113,33 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 删除菜单
-         * @param {DeleteMenuInput} [body] 
+         * @summary 获取菜单列表
+         * @param {string} [title] 标题
+         * @param {MenuTypeEnum} [type] 菜单类型(1目录 2菜单 3按钮)
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        apiSysMenuDeleteDelete: async (body?: DeleteMenuInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysMenu/delete`;
+        apiSysMenuListGet: async (title?: string, type?: MenuTypeEnum, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysMenu/list`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
             if (configuration) {
                 baseOptions = configuration.baseOptions;
             }
-            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
             // authentication Bearer required
 
-            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+            if (title !== undefined) {
+                localVarQueryParameter['Title'] = title;
+            }
+
+            if (type !== undefined) {
+                localVarQueryParameter['Type'] = type;
+            }
 
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
@@ -139,8 +151,6 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
                 url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
@@ -149,14 +159,12 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 获取菜单列表
-         * @param {string} [title] 标题
-         * @param {MenuTypeEnum} [type] 菜单类型(1目录 2菜单 3按钮)
+         * @summary 获取登录菜单树
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        apiSysMenuListGet: async (title?: string, type?: MenuTypeEnum, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysMenu/list`;
+        apiSysMenuLoginMenuTreeGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysMenu/loginMenuTree`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -169,14 +177,6 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
 
             // authentication Bearer required
 
-            if (title !== undefined) {
-                localVarQueryParameter['Title'] = title;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['Type'] = type;
-            }
-
             const query = new URLSearchParams(localVarUrlObj.search);
             for (const key in localVarQueryParameter) {
                 query.set(key, localVarQueryParameter[key]);
@@ -195,12 +195,12 @@ export const SysMenuApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 获取登录菜单树
+         * @summary 获取用户拥有按钮权限集合(缓存)
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        apiSysMenuLoginMenuTreeGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysMenu/loginMenuTree`;
+        apiSysMenuOwnBtnPermListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysMenu/ownBtnPermList`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -293,19 +293,6 @@ export const SysMenuApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
-        /**
-         * 
-         * @summary 获取按钮权限集合
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysMenuBtnPermissionListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListString>>> {
-            const localVarAxiosArgs = await SysMenuApiAxiosParamCreator(configuration).apiSysMenuBtnPermissionListGet(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
         /**
          * 
          * @summary 删除菜单
@@ -348,6 +335,19 @@ export const SysMenuApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
+        /**
+         * 
+         * @summary 获取用户拥有按钮权限集合(缓存)
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListString>>> {
+            const localVarAxiosArgs = await SysMenuApiAxiosParamCreator(configuration).apiSysMenuOwnBtnPermListGet(options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
         /**
          * 
          * @summary 更新菜单
@@ -381,15 +381,6 @@ export const SysMenuApiFactory = function (configuration?: Configuration, basePa
         async apiSysMenuAddPost(body?: AddMenuInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
             return SysMenuApiFp(configuration).apiSysMenuAddPost(body, options).then((request) => request(axios, basePath));
         },
-        /**
-         * 
-         * @summary 获取按钮权限集合
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysMenuBtnPermissionListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListString>> {
-            return SysMenuApiFp(configuration).apiSysMenuBtnPermissionListGet(options).then((request) => request(axios, basePath));
-        },
         /**
          * 
          * @summary 删除菜单
@@ -420,6 +411,15 @@ export const SysMenuApiFactory = function (configuration?: Configuration, basePa
         async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListMenuOutput>> {
             return SysMenuApiFp(configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(axios, basePath));
         },
+        /**
+         * 
+         * @summary 获取用户拥有按钮权限集合(缓存)
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListString>> {
+            return SysMenuApiFp(configuration).apiSysMenuOwnBtnPermListGet(options).then((request) => request(axios, basePath));
+        },
         /**
          * 
          * @summary 更新菜单
@@ -451,16 +451,6 @@ export class SysMenuApi extends BaseAPI {
     public async apiSysMenuAddPost(body?: AddMenuInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
         return SysMenuApiFp(this.configuration).apiSysMenuAddPost(body, options).then((request) => request(this.axios, this.basePath));
     }
-    /**
-     * 
-     * @summary 获取按钮权限集合
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SysMenuApi
-     */
-    public async apiSysMenuBtnPermissionListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListString>> {
-        return SysMenuApiFp(this.configuration).apiSysMenuBtnPermissionListGet(options).then((request) => request(this.axios, this.basePath));
-    }
     /**
      * 
      * @summary 删除菜单
@@ -494,6 +484,16 @@ export class SysMenuApi extends BaseAPI {
     public async apiSysMenuLoginMenuTreeGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListMenuOutput>> {
         return SysMenuApiFp(this.configuration).apiSysMenuLoginMenuTreeGet(options).then((request) => request(this.axios, this.basePath));
     }
+    /**
+     * 
+     * @summary 获取用户拥有按钮权限集合(缓存)
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysMenuApi
+     */
+    public async apiSysMenuOwnBtnPermListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListString>> {
+        return SysMenuApiFp(this.configuration).apiSysMenuOwnBtnPermListGet(options).then((request) => request(this.axios, this.basePath));
+    }
     /**
      * 
      * @summary 更新菜单

+ 1 - 1
Web/src/api-services/models/sys-log-diff.ts

@@ -94,5 +94,5 @@ export interface SysLogDiff {
      * @type {number}
      * @memberof SysLogDiff
      */
-    elapsed?: number;
+    elapsed?: number | null;
 }

+ 2 - 2
Web/src/api-services/models/sys-log-op.ts

@@ -124,13 +124,13 @@ export interface SysLogOp {
      * @type {number}
      * @memberof SysLogOp
      */
-    elapsed?: number;
+    elapsed?: number | null;
     /**
      * 日志时间
      * @type {Date}
      * @memberof SysLogOp
      */
-    logDateTime?: Date;
+    logDateTime?: Date | null;
     /**
      * 账号
      * @type {string}

+ 2 - 2
Web/src/api-services/models/sys-log-vis.ts

@@ -124,13 +124,13 @@ export interface SysLogVis {
      * @type {number}
      * @memberof SysLogVis
      */
-    elapsed?: number;
+    elapsed?: number | null;
     /**
      * 日志时间
      * @type {Date}
      * @memberof SysLogVis
      */
-    logDateTime?: Date;
+    logDateTime?: Date | null;
     /**
      * 账号
      * @type {string}