public async Task <IActionResult> Index() { OperatorInfo operatorInfo = await _operator.Current(); if (operatorInfo == null) { LogHelper.Debug("User Not Login. Redirect to Login page."); return(RedirectToAction("Login")); } TData <List <MenuEntity> > objMenu = await menuBLL.GetList(null); List <MenuEntity> menuList = objMenu.Data; menuList = menuList.Where(p => p.MenuStatus == StatusEnum.Yes.ParseToInt()).ToList(); if (operatorInfo.IsSystem != 1) { TData <List <MenuAuthorizeInfo> > objMenuAuthorize = await menuAuthorizeBLL.GetAuthorizeList(operatorInfo); List <long?> authorizeMenuIdList = objMenuAuthorize.Data.Select(p => p.MenuId).ToList(); menuList = menuList.Where(p => authorizeMenuIdList.Contains(p.Id)).ToList(); } ViewBag.MenuList = menuList; ViewBag.OperatorInfo = operatorInfo; return(View()); }
public async Task <TData <List <ZtreeInfo> > > GetZtreeUserList(DepartmentListParam param) { var obj = new TData <List <ZtreeInfo> >(); obj.Data = new List <ZtreeInfo>(); var departmentList = await _departmentService.GetList(param); var operatorInfo = await _operatorCache.Current(); if (operatorInfo.IsSystem != 1) { var childrenDepartmentIdList = await GetChildrenDepartmentIdList(departmentList, operatorInfo.DepartmentId.Value); departmentList = departmentList.Where(p => childrenDepartmentIdList.Contains(p.Id.Value)).ToList(); } var userList = await _userService.GetList(null); foreach (var department in departmentList) { obj.Data.Add(new ZtreeInfo { id = department.Id, pId = department.ParentId, name = department.DepartmentName }); var userIdList = userList.Where(t => t.DepartmentId == department.Id).Select(t => t.Id.Value).ToList(); foreach (var user in userList.Where(t => userIdList.Contains(t.Id.Value))) { obj.Data.Add(new ZtreeInfo { id = user.Id, pId = department.Id, name = user.RealName }); } } obj.Tag = 1; return(obj); }
public async Task <IActionResult> GetUserAuthorizeJson() { TData <UserAuthorizeInfo> obj = new TData <UserAuthorizeInfo>(); OperatorInfo operatorInfo = await _operator.Current(); TData <List <MenuAuthorizeInfo> > objMenuAuthorizeInfo = await _menuAuthorizeBll.GetAuthorizeList(operatorInfo); obj.Data = new UserAuthorizeInfo(); obj.Data.IsSystem = operatorInfo.IsSystem; if (objMenuAuthorizeInfo.Tag == 1) { obj.Data.MenuAuthorize = objMenuAuthorizeInfo.Data; } obj.Tag = 1; return(Json(obj)); }
public async Task <TData <object> > GetPageListAndUserInfo() { var operatorInfo = await _operatorCache.Current(); var objMenu = await _menuBLL.GetList(null); var menuList = objMenu.Data; menuList = menuList.Where(p => p.MenuStatus == StatusEnum.Yes.ParseToInt()).ToList(); if (operatorInfo.IsSystem != 1) { var objMenuAuthorize = await _menuAuthorizeBLL.GetAuthorizeList(operatorInfo); var authorizeMenuIdList = objMenuAuthorize.Data.Select(p => p.MenuId).ToList(); menuList = menuList.Where(p => authorizeMenuIdList.Contains(p.Id)).ToList(); } #region 导航栏数据处理 var menuResult = new List <MenuResult>(); foreach (var menu in menuList.Where(p => p.ParentId == 0).OrderBy(p => p.MenuSort)) { var menu_a = new MenuResult(); menu_a.url = HttpHelper.IsUrl(menu.MenuUrl) ? menu.MenuUrl : "javascript:;"; menu_a.icon = menu.MenuIcon; menu_a.name = menu.MenuName; menu_a.subMenus = new List <MenuResult>(); foreach (var secondMenu in menuList.Where(p => p.ParentId == menu.Id).OrderBy(p => p.MenuSort)) { var menu_b = new MenuResult(); menu_b.url = HttpHelper.IsUrl(secondMenu.MenuUrl) ? secondMenu.MenuUrl : "javascript:;"; menu_b.name = secondMenu.MenuName; menu_b.url = secondMenu.MenuUrl; if (menuList.Where(p => p.ParentId == secondMenu.Id && p.MenuType != (int)MenuTypeEnum.Button) .Count() != 0) { menu_b.subMenus = new List <MenuResult>(); foreach (var thirdMenu in menuList.Where(p => p.ParentId == secondMenu.Id) .OrderBy(p => p.MenuSort)) { var menu_c = new MenuResult(); menu_c.url = HttpHelper.IsUrl(thirdMenu.MenuUrl) ? thirdMenu.MenuUrl : "javascript:;"; menu_c.name = thirdMenu.MenuName; menu_c.url = thirdMenu.MenuUrl; menu_b.subMenus.Add(menu_c); } } menu_a.subMenus.Add(menu_b); } menuResult.Add(menu_a); } #endregion var data = new TData <object>(); data.Tag = 1; data.Data = new { operatorInfo, menuResult }; return(data); }
/// <summary> /// 异步接口日志 /// </summary> public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { bool hasAllowAnonymous = context.ActionDescriptor.EndpointMetadata .Any(em => em.GetType() == typeof(AllowAnonymousAttribute)); //< -- Here it is if (hasAllowAnonymous) { await next(); } else { // 类似计时器 var sw = new Stopwatch(); sw.Start(); // 获取用户信息 var user = await _operator.Current(); if (user == null) { throw new Exception("User not logged in."); } // 更新用户的权限到缓存中 if (user.MenuAuthorizes == null || user.MenuAuthorizes.Count() == 0) { var objMenuAuthorize = await _menuAuthorizeBLL.GetAuthorizeList(user); user.MenuAuthorizes = objMenuAuthorize.Data; _operator.UpdateOperatorInfo(user); } // 校验用户权限 var obj = await CheckAccess(context, user); // 没有权限 if (obj.Tag == 0) { obj.Message = "抱歉,您没有权限"; context.Result = new JsonResult(obj); return; } // 执行 var resultContext = await next(); #region 保存日志 // 如果配置了仅记录报错日志 if (LogAllApi.ToUpper() == "ERROR" && resultContext.Exception == null) { return; } var logApiEntity = new LogApiEntity(); logApiEntity.ExecuteUrl = context.HttpContext.Request.Path; logApiEntity.LogStatus = OperateStatusEnum.Success.ParseToInt(); #region 获取Post参数 switch (context.HttpContext.Request.Method.ToUpper()) { case "GET": logApiEntity.ExecuteParam = context.HttpContext.Request.QueryString.Value.ParseToString(); break; case "POST": if (context.ActionArguments?.Count > 0) { if (!context.HttpContext.Request.QueryString.HasValue) { break; } logApiEntity.ExecuteUrl += context.HttpContext.Request.QueryString.Value.ParseToString(); logApiEntity.ExecuteParam = TextHelper.GetSubString(JsonConvert.SerializeObject(context.ActionArguments), 4000); } else { logApiEntity.ExecuteParam = context.HttpContext.Request.QueryString.Value.ParseToString(); } break; } #endregion if (user != null) { logApiEntity.CreatorId = user.UserId; } // 异常信息 SetExceptionMsg(resultContext, context, logApiEntity); // 计时器结束 sw.Stop(); logApiEntity.ExecuteTime = sw.ElapsedMilliseconds.ParseToInt(); logApiEntity.IpAddress = NetHelper.Ip; // 记录日志 await SaveLogAPI(logApiEntity); #endregion } }
public async Task <IActionResult> ChangePassword() { ViewBag.OperatorInfo = await _operatorCache.Current(); return(View()); }
public async Task <TData <OperatorInfo> > Login([FromForm] string userName, [FromForm] string password) { var obj = new TData <OperatorInfo>(); var userObj = await _userBLL.CheckLogin(userName, password); if (userObj.Tag == 1) { await _userBLL.UpdateLoginInfo(userObj.Data); await _operatorCache.AddCurrent(userObj.Data.ApiToken); obj.Data = await _operatorCache.Current(userObj.Data.ApiToken); } obj.Message = userObj.Message; var ip = NetHelper.Ip; var browser = NetHelper.Browser; var os = NetHelper.GetOSVersion(); var userAgent = NetHelper.UserAgent; var logLoginEntity = new LogLoginEntity { LogStatus = userObj.Tag == 1 ? OperateStatusEnum.Success.ParseToInt() : OperateStatusEnum.Fail.ParseToInt(), Remark = userObj.Message, IpAddress = ip, IpLocation = IpLocationHelper.GetIpLocation(ip), Browser = browser, OS = os, ExtraRemark = userAgent, CreatorId = userObj.Data == null ? 0 : userObj.Data.Id, CreateTime = DateTime.Now }; await _logLoginBLL.SaveForm(logLoginEntity); if (userObj.Tag == 0) { return(obj); } // 生成前端的token // 生成 token var jwtSettings = App.GetOptions <JWTSettingsOptions>(); var datetimeOffset = DateTimeOffset.UtcNow; var accessToken = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey, new Dictionary <string, object> { { "UserId", userObj.Data.Id.ToString() }, // 存储Id { "Account", userObj.Data.UserName }, // 存储用户名 { "ApiToken", userObj.Data.ApiToken }, // ApiToken { JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddSeconds(jwtSettings.ExpiredTime.Value * 60).ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer }, { JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience } }); // 覆盖apitoken,因为前端需要的是jwt生成的token,而缓存使用的是数据库的apitoken字段 obj.Data.JwtToken = accessToken; obj.Tag = userObj.Tag; var claims = new List <Claim> { new Claim(ClaimTypes.Name, userObj.Data.UserName), new Claim("ApiToken", userObj.Data.ApiToken), }; var claimsIdentity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties(); await NetHelper.HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return(obj); }