| | |
| | | 级别 |
| | | </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> |
| | | 验证管道,也就是验证核心代码 |
| | |
| | | /// 账号 |
| | | /// </summary> |
| | | [Required] |
| | | [DataValidation(ValidationTypes.Username)] |
| | | public string UserName { get; set; } |
| | | /// <summary> |
| | | /// 密码 |
| | |
| | | /// 级别 |
| | | /// </summary> |
| | | public int Level { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 用户类型 |
| | | /// </summary> |
| | | public EnumUserType Type { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 客户端类型 |
| | | /// </summary> |
| | | public EnumClientType ClientType { get; set; } |
| | | } |
| | | } |
| | |
| | | { "UserName",logier.UserName }, |
| | | { "PhoneNumber",logier.PhoneNumber }, |
| | | { "Level",logier.Level }, |
| | | { "Type",logier.Type }, |
| | | { "ClientType",logier.ClientType }, |
| | | }); |
| | | // 获取刷新 token |
| | | logier.RefreshToken = JWTEncryption.GenerateRefreshToken(logier.AccessToken, 60 * 24); |
| | |
| | | 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; |
| | |
| | | using System; |
| | | using Furion.FriendlyException; |
| | | using Mapster.Utils; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Data.SqlTypes; |
| | | using System.Diagnostics.CodeAnalysis; |
| | |
| | | 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> |
| | |
| | | UserName = userInfo.UserName, |
| | | PhoneNumber = userInfo.PhoneNumber, |
| | | Level = userInfo.Level, |
| | | Type = request.Type, |
| | | ClientType = request.ClientType |
| | | }; |
| | | JwtUtils.GenerateToken(logier); |
| | | |
| | |
| | | .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 |
| | | { |
| | |
| | | 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; |