Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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
            }
        }
Esempio n. 6
0
        public async Task <IActionResult> ChangePassword()
        {
            ViewBag.OperatorInfo = await _operatorCache.Current();

            return(View());
        }
Esempio n. 7
0
        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);
        }