sunpengfei
2025-08-07 177aa6f1c4601e4fb34aff04c4e328c98b489888
fix:bug
8个文件已修改
92 ■■■■ 已修改文件
FlexJobApi.Core/FlexJobApi.Core.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/User/Auths/Commands/PasswordLoginCommand.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/StringUtils/StringUtils.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenusQueryHandler.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.xml
@@ -4865,6 +4865,16 @@
            级别
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.CurrentLogier.Type">
            <summary>
            用户类型
            </summary>
        </member>
        <member name="P:FlexJobApi.Core.CurrentLogier.ClientType">
            <summary>
            客户端类型
            </summary>
        </member>
        <member name="M:FlexJobApi.Core.JwtHandler.PipelineAsync(Microsoft.AspNetCore.Authorization.AuthorizationHandlerContext,Microsoft.AspNetCore.Http.DefaultHttpContext)">
            <summary>
            验证管道,也就是验证核心代码
FlexJobApi.Core/Models/User/Auths/Commands/PasswordLoginCommand.cs
@@ -19,7 +19,6 @@
        /// 账号
        /// </summary>
        [Required]
        [DataValidation(ValidationTypes.Username)]
        public string UserName { get; set; }
        /// <summary>
        /// 密码
FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs
@@ -47,5 +47,15 @@
        /// 级别
        /// </summary>
        public int Level { get; set; }
        /// <summary>
        /// 用户类型
        /// </summary>
        public EnumUserType Type { get; set; }
        /// <summary>
        /// 客户端类型
        /// </summary>
        public EnumClientType ClientType { get; set; }
    }
}
FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
@@ -35,6 +35,8 @@
                { "UserName",logier.UserName },
                { "PhoneNumber",logier.PhoneNumber },
                { "Level",logier.Level },
                { "Type",logier.Type },
                { "ClientType",logier.ClientType },
            });
            // 获取刷新 token
            logier.RefreshToken = JWTEncryption.GenerateRefreshToken(logier.AccessToken, 60 * 24);
@@ -55,11 +57,13 @@
                var logier = new CurrentLogier();
                if (Guid.TryParse(App.User?.FindFirstValue("UserInfoId"), out var userInfoId)) logier.UserInfoId = userInfoId;
                else return null;
                logier.Level = App.User?.FindFirstValue("Level")?.ToInt() ?? 0;
                logier.Avatar = App.User?.FindFirstValue("Avatar");
                logier.Name = App.User?.FindFirstValue("Name");
                logier.UserName = App.User?.FindFirstValue("UserName");
                logier.PhoneNumber = App.User?.FindFirstValue("PhoneNumber");
                logier.Level = App.User.FindFirstValue("Level")?.ToInt() ?? 0;
                logier.Avatar = App.User.FindFirstValue("Avatar");
                logier.Name = App.User.FindFirstValue("Name");
                logier.UserName = App.User.FindFirstValue("UserName");
                logier.PhoneNumber = App.User.FindFirstValue("PhoneNumber");
                logier.Type = App.User.FindFirstValue("Type").ToEnum<EnumUserType>("请填写用户类型").Value;
                logier.ClientType = App.User.FindFirstValue("ClientType").ToEnum<EnumClientType>("请填写客户端类型").Value;
                return logier;
            }
            return null;
FlexJobApi.Core/Utils/StringUtils/StringUtils.cs
@@ -1,4 +1,6 @@
using System;
using Furion.FriendlyException;
using Mapster.Utils;
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Diagnostics.CodeAnalysis;
@@ -45,6 +47,14 @@
            return null;
        }
        public static T? ToEnum<T>(this string str, string requiredMessage = null)
             where T : struct
        {
            if (str.IsNotNull() && Enum.TryParse<T>(str, out var @enum)) return @enum;
            if (requiredMessage.IsNotNull()) throw Oops.Oh(EnumErrorCodeType.s400, requiredMessage);
            return null;
        }
        /// <summary>
        /// 获取复数英文名
        /// </summary>
FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs
@@ -53,6 +53,8 @@
                UserName = userInfo.UserName,
                PhoneNumber = userInfo.PhoneNumber,
                Level = userInfo.Level,
                Type = request.Type,
                ClientType = request.ClientType
            };
            JwtUtils.GenerateToken(logier);
FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs
@@ -34,14 +34,20 @@
                .ProjectToType<GetMenuQueryResult>()
                .FirstOrDefaultAsync(cancellationToken);
            if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该菜单");
            var items = await (from m in repMenu.AsQueryable().AsNoTracking()
                               join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId into rmg
                               from rmgi in rmg.DefaultIfEmpty()
                               join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rmgi.RoleId equals ur.RoleId into urg
                               from urgi in urg.DefaultIfEmpty()
                               where m.ParentId == request.Id && (logier.Level == 999 || urgi.UserInfoId == logier.UserInfoId) && !m.IsDisabled
                               && (m.Type == EnumMenuType.Button || m.Type == EnumMenuType.Field)
                               select m).ProjectToType<GetMenuQueryResultItem>().ToListAsync(cancellationToken);
            var q = repMenu.AsQueryable().AsNoTracking()
                .Where(it => it.ParentId == model.Id)
                .Where(it => it.Type == EnumMenuType.Button || it.Type == EnumMenuType.Field);
            if (logier.Level != 999)
            {
                var menuIds = await repRoleMenu.AsQueryable().AsNoTracking()
                    .Where(it => it.Role.UserInfoRoles.Any(ur => ur.UserInfoId == logier.UserInfoId))
                    .Select(it => it.MenuId)
                    .ToListAsync(cancellationToken);
                q = q.Where(it => menuIds.Contains(it.Id));
            }
            var items = await q
                .ProjectToType<GetMenuQueryResultItem>()
                .ToListAsync(cancellationToken);
            model.Groups = items.GroupBy(it => it.Group ?? "default")
                .Select(it => new GetMenuQueryResultGroup
                {
FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenusQueryHandler.cs
@@ -31,14 +31,19 @@
        public async Task<List<GetMenusQueryResultItem>> Handle(GetCurrentLogierMenusQuery request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            var all = await (from m in repMenu.AsQueryable().AsNoTracking()
                             join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId into rmg
                             from rmgi in rmg.DefaultIfEmpty()
                             join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rmgi.RoleId equals ur.RoleId into urg
                             from urgi in urg.DefaultIfEmpty()
                             where (logier.Level == 999 || urgi.UserInfoId == logier.UserInfoId) && !m.IsDisabled
                             && (m.Type == EnumMenuType.Menu || m.Type == EnumMenuType.Page || m.Type == EnumMenuType.Modal)
                             select m).ProjectToType<GetMenusQueryResultItem>().ToListAsync();
            var q = repMenu.AsQueryable().AsNoTracking()
                .OrderBy(it => it.Sort)
                .Where(it => it.UserType == logier.Type && it.ClientType == logier.ClientType)
                .Where(it => it.Type == EnumMenuType.Menu || it.Type == EnumMenuType.Page || it.Type == EnumMenuType.Modal);
            if (logier.Level != 999)
            {
                var menuIds = await repRoleMenu.AsQueryable().AsNoTracking()
                    .Where(it => it.Role.UserInfoRoles.Any(ur => ur.UserInfoId == logier.UserInfoId))
                    .Select(it => it.MenuId)
                    .ToListAsync(cancellationToken);
                q = q.Where(it => menuIds.Contains(it.Id));
            }
            var all = await q.ProjectToType<GetMenusQueryResultItem>().ToListAsync();
            var models = all.Where(it => it.ParentId == null).ToList();
            LoopChildrens(models, all, []);
            return models;