private void LoopNaviBarAppendChildren(List<NavigationBarDto> list, NavigationBarDto curentItem) { var childrenList = list.Where(m => m.pid == curentItem.id).ToList(); curentItem.children.AddRange(childrenList); foreach (var item in childrenList) { LoopNaviBarAppendChildren(list, item); } }
public async Task<ApiResponseModel<NavigationBarDto>> GetNavigationBar(int uid) { var token = _httpContext.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); var id = JwtHelper.SerializeJwt(token)?.Uid; if (id != uid) { return ApiResponse.Error<NavigationBarDto>("参数和token不一样"); } var roleIds = (await _userRoleServices.Query(m => m.IsDeleted == false && m.UserId == id)).Select(m => m.RoleId).Distinct().ToList(); if (!roleIds.Any()) { return ApiResponse.Error<NavigationBarDto>("用户未分配角色"); } var permissionIds = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && roleIds.Contains(d.RoleId))).Select(m => m.PermissionId).Distinct().ToList(); var permissionList = (await _permissionServices.Query(m => permissionIds.Contains(m.Id) && m.IsDeleted == false)).OrderBy(c => c.OrderSort).ToList(); var permissionTree = permissionList.Select(child => new NavigationBarDto { id = child.Id, name = child.Name, pid = child.Pid, order = child.OrderSort, path = child.Code, iconCls = child.Icon, Func = child.Func, IsHide = child.IsHide.ObjToBool(), IsButton = child.IsButton.ObjToBool(), meta = new NavigationBarMetaDto { requireAuth = true, title = child.Name, NoTabPage = child.IsHide.ObjToBool() } }).ToList(); NavigationBarDto rootRoot = new NavigationBarDto { id = 0, pid = 0, order = 0, name = "根节点", path = "", iconCls = "", meta = new NavigationBarMetaDto(), }; LoopNaviBarAppendChildren(permissionTree, rootRoot); return ApiResponse.Success(rootRoot); }