Exemplo n.º 1
0
        /// <summary>
        /// 根据相关信息,写入用户的操作日志记录
        /// </summary>
        /// <param name="tableName">操作表名称</param>
        /// <param name="operationType">操作类型</param>
        /// <param name="note">操作详细表述</param>
        /// <returns></returns>
        public bool OnOperationLog(string tableName, string operationType, string note)
        {
            try
            {
                //虽然实现了这个事件,但是我们还需要判断该表是否在配置表里面,如果不在,则不记录操作日志。
                //var identities = _httpContextAccessor.HttpContext.User.Identities;
                if (HttpContextHelper.HttpContext == null)
                {
                    return(false);
                }
                var               identities        = HttpContextHelper.HttpContext.User.Identities;
                var               claimsIdentity    = identities.First <ClaimsIdentity>();
                List <Claim>      claimlist         = claimsIdentity.Claims as List <Claim>;
                string            userId            = claimlist[0].Value;
                YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                YuebonCurrentUser CurrentUser       = new YuebonCurrentUser();
                var               user = yuebonCacheHelper.Get("login_user_" + userId).ToJson().ToObject <YuebonCurrentUser>();
                if (user != null)
                {
                    CurrentUser = user;
                    bool insert     = operationType == DbLogType.Create.ToString();;    //&& settingInfo.InsertLog;
                    bool update     = operationType == DbLogType.Update.ToString();     // && settingInfo.UpdateLog;
                    bool delete     = operationType == DbLogType.Delete.ToString();     // && settingInfo.DeleteLog;
                    bool deletesoft = operationType == DbLogType.DeleteSoft.ToString(); // && settingInfo.DeleteLog;
                    bool exception  = operationType == DbLogType.Exception.ToString();  // && settingInfo.DeleteLog;
                    bool sql        = operationType == DbLogType.SQL.ToString();        // && settingInfo.DeleteLog;

                    if (insert || update || delete || deletesoft || exception || sql)
                    {
                        Log info = new Log();
                        info.ModuleName    = tableName;
                        info.Type          = operationType;
                        info.Description   = note;
                        info.Date          = info.CreatorTime = DateTime.Now;
                        info.CreatorUserId = CurrentUser.UserId;
                        info.Account       = CurrentUser.Account;
                        info.NickName      = CurrentUser.NickName;
                        info.OrganizeId    = CurrentUser.OrganizeId;
                        info.IPAddress     = CurrentUser.CurrentLoginIP;
                        info.IPAddressName = CurrentUser.IPAddressName;
                        info.Result        = true;
                        long lg = _iLogRepository.Insert(info);
                        if (lg > 0)
                        {
                            return(true);
                        }
                    }
                }
            }catch (Exception ex)
            {
                Log4NetHelper.Error("", ex);
                return(false);
            }
            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 判断是否为系统管理员或超级管理员
        /// </summary>
        /// <returns>true:系统管理员或超级管理员,false:不是系统管理员或超级管理员</returns>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public static bool IsAdmin(YuebonCurrentUser currentUser)
        {
            bool blnIsAdmin = false;

            if (currentUser != null)
            {
                if (currentUser.Account == "admin" || currentUser.Role.Contains("administrators", StringComparison.Ordinal))
                {
                    return(true);
                }
            }
            return(blnIsAdmin);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 根据相关信息,写入用户的操作日志记录
        /// 主要用于写操作模块日志
        /// </summary>
        /// <param name="module">操作模块名称</param>
        /// <param name="operationType">操作类型</param>
        /// <param name="note">操作详细表述</param>
        /// <param name="currentUser">操作用户</param>
        /// <returns></returns>
        public bool OnOperationLog(string module, string operationType, string note, YuebonCurrentUser currentUser)
        {
            //虽然实现了这个事件,但是我们还需要判断该表是否在配置表里面,如果不在,则不记录操作日志。
            //OperationLogSettingInfo settingInfo = BLLFactory<OperationLogSetting>.Instance.FindByTableName(tableName, trans);

            if (currentUser != null)
            {
                bool login      = operationType == DbLogType.Login.ToString();
                bool visit      = operationType == DbLogType.Visit.ToString();
                bool exit       = operationType == DbLogType.Exit.ToString();
                bool other      = operationType == DbLogType.Other.ToString();
                bool insert     = operationType == DbLogType.Create.ToString();
                bool update     = operationType == DbLogType.Update.ToString();
                bool delete     = operationType == DbLogType.Delete.ToString();
                bool deletesoft = operationType == DbLogType.DeleteSoft.ToString();
                bool exception  = operationType == DbLogType.Exception.ToString();
                if (login || visit || exit || other || insert || update || delete || deletesoft || exception)
                {
                    Log info = new Log();
                    info.ModuleName    = module;
                    info.Type          = operationType;
                    info.Description   = note;
                    info.Date          = info.CreatorTime = DateTime.Now;
                    info.CreatorUserId = currentUser.UserId;
                    info.Account       = currentUser.Account;
                    info.NickName      = currentUser.NickName;
                    info.OrganizeId    = currentUser.OrganizeId;
                    info.IPAddress     = currentUser.CurrentLoginIP;
                    info.IPAddressName = IpAddressUtil.GetCityByIp(currentUser.CurrentLoginIP);
                    info.Result        = true;
                    long lg = _iLogRepository.Insert(info);
                    if (lg > 0)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 4
0
        public async Task <IActionResult> GetCheckUser(string username, string password, string vcode, string vkey, string appId, string systemCode)
        {
            CommonResult      result            = new CommonResult();
            RemoteIpParser    remoteIpParser    = new RemoteIpParser();
            string            strIp             = remoteIpParser.GetClientIp(HttpContext).MapToIPv4().ToString();
            YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
            var    vCode = yuebonCacheHelper.Get("ValidateCode" + vkey);
            string code  = vCode != null?vCode.ToString() : "11";

            if (vcode.ToUpper() != code)
            {
                result.ErrMsg = "验证码错误";
                return(ToJsonContent(result));
            }
            Log  logEntity = new Log();
            bool blIp      = _filterIPService.ValidateIP(strIp);

            if (blIp)
            {
                result.ErrMsg = strIp + "该IP已被管理员禁止登录!";
            }
            else
            {
                if (string.IsNullOrEmpty(username))
                {
                    result.ErrMsg = "用户名不能为空!";
                }
                else if (string.IsNullOrEmpty(password))
                {
                    result.ErrMsg = "密码不能为空!";
                }
                if (string.IsNullOrEmpty(systemCode))
                {
                    result.ErrMsg = ErrCode.err40006;
                }
                else
                {
                    string strHost = Request.Host.ToString();
                    APP    app     = _appService.GetAPP(appId);
                    if (app == null)
                    {
                        result.ErrCode = "40001";
                        result.ErrMsg  = ErrCode.err40001;
                    }
                    else
                    {
                        if (!app.RequestUrl.Contains(strHost, StringComparison.Ordinal) && !strHost.Contains("localhost", StringComparison.Ordinal))
                        {
                            result.ErrCode = "40002";
                            result.ErrMsg  = ErrCode.err40002 + ",你当前请求主机:" + strHost;
                        }
                        else
                        {
                            SystemType systemType = _systemTypeService.GetByCode(systemCode);
                            if (systemType == null)
                            {
                                result.ErrMsg = ErrCode.err40006;
                            }
                            else
                            {
                                Tuple <User, string> userLogin = await this._userService.Validate(username, password);

                                if (userLogin != null)
                                {
                                    string ipAddressName = IpAddressUtil.GetCityByIp(strIp);
                                    if (userLogin.Item1 != null)
                                    {
                                        result.Success = true;
                                        User              user           = userLogin.Item1;
                                        JwtOption         jwtModel       = App.GetService <JwtOption>();
                                        TokenProvider     tokenProvider  = new TokenProvider(jwtModel);
                                        TokenResult       tokenResult    = tokenProvider.LoginToken(user, appId);
                                        YuebonCurrentUser currentSession = new YuebonCurrentUser
                                        {
                                            UserId         = user.Id,
                                            Name           = user.RealName,
                                            AccessToken    = tokenResult.AccessToken,
                                            AppKey         = appId,
                                            CreateTime     = DateTime.Now,
                                            Role           = _roleService.GetRoleEnCode(user.RoleId),
                                            ActiveSystemId = systemType.Id,
                                            CurrentLoginIP = strIp,
                                            IPAddressName  = ipAddressName
                                        };
                                        TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;
                                        yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);

                                        List <AllowCacheApp> list = yuebonCacheHelper.Get("AllowAppId").ToJson().ToList <AllowCacheApp>();
                                        if (list.Count == 0)
                                        {
                                            IEnumerable <APP> appList = _appService.GetAllByIsNotDeleteAndEnabledMark();
                                            yuebonCacheHelper.Add("AllowAppId", appList);
                                        }
                                        CurrentUser    = currentSession;
                                        result.ResData = currentSession;
                                        result.ErrCode = ErrCode.successCode;
                                        result.Success = true;

                                        logEntity.Account       = user.Account;
                                        logEntity.NickName      = user.NickName;
                                        logEntity.Date          = logEntity.CreatorTime = DateTime.Now;
                                        logEntity.IPAddress     = CurrentUser.CurrentLoginIP;
                                        logEntity.IPAddressName = CurrentUser.IPAddressName;
                                        logEntity.Result        = true;
                                        logEntity.ModuleName    = "登录";
                                        logEntity.Description   = "登录成功";
                                        logEntity.Type          = "Login";
                                        _logService.Insert(logEntity);
                                    }
                                    else
                                    {
                                        result.ErrCode          = ErrCode.failCode;
                                        result.ErrMsg           = userLogin.Item2;
                                        logEntity.Account       = username;
                                        logEntity.Date          = logEntity.CreatorTime = DateTime.Now;
                                        logEntity.IPAddress     = strIp;
                                        logEntity.IPAddressName = ipAddressName;
                                        logEntity.Result        = false;
                                        logEntity.ModuleName    = "登录";
                                        logEntity.Type          = "Login";
                                        logEntity.Description   = "登录失败," + userLogin.Item2;
                                        _logService.Insert(logEntity);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            yuebonCacheHelper.Remove("LoginValidateCode");
            return(ToJsonContent(result, true));
        }
Exemplo n.º 5
0
        public IActionResult SysConnect(string openmf, string appId, string systemCode)
        {
            CommonResult   result         = new CommonResult();
            RemoteIpParser remoteIpParser = new RemoteIpParser();
            string         strIp          = remoteIpParser.GetClientIp(HttpContext).MapToIPv4().ToString();

            if (string.IsNullOrEmpty(openmf))
            {
                result.ErrMsg = "切换参数错误!";
            }

            bool blIp = _filterIPService.ValidateIP(strIp);

            if (blIp)
            {
                result.ErrMsg = strIp + "该IP已被管理员禁止登录!";
            }
            else
            {
                string ipAddressName = IpAddressUtil.GetCityByIp(strIp);
                if (string.IsNullOrEmpty(systemCode))
                {
                    result.ErrMsg = ErrCode.err40006;
                }
                else
                {
                    string strHost = Request.Host.ToString();
                    APP    app     = _appService.GetAPP(appId);
                    if (app == null)
                    {
                        result.ErrCode = "40001";
                        result.ErrMsg  = ErrCode.err40001;
                    }
                    else
                    {
                        if (!app.RequestUrl.Contains(strHost, StringComparison.Ordinal) && !strHost.Contains("localhost", StringComparison.Ordinal))
                        {
                            result.ErrCode = "40002";
                            result.ErrMsg  = ErrCode.err40002 + ",你当前请求主机:" + strHost;
                        }
                        else
                        {
                            SystemType systemType = _systemTypeService.GetByCode(systemCode);
                            if (systemType == null)
                            {
                                result.ErrMsg = ErrCode.err40006;
                            }
                            else
                            {
                                YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                                object            cacheOpenmf       = yuebonCacheHelper.Get("openmf" + openmf);
                                yuebonCacheHelper.Remove("openmf" + openmf);
                                if (cacheOpenmf == null)
                                {
                                    result.ErrCode = "40007";
                                    result.ErrMsg  = ErrCode.err40007;
                                }
                                else
                                {
                                    User user = _userService.Get(cacheOpenmf.ToString());
                                    if (user != null)
                                    {
                                        result.Success = true;
                                        JwtOption         jwtModel       = App.GetService <JwtOption>();
                                        TokenProvider     tokenProvider  = new TokenProvider(jwtModel);
                                        TokenResult       tokenResult    = tokenProvider.LoginToken(user, appId);
                                        YuebonCurrentUser currentSession = new YuebonCurrentUser
                                        {
                                            UserId          = user.Id,
                                            Name            = user.RealName,
                                            AccessToken     = tokenResult.AccessToken,
                                            AppKey          = appId,
                                            CreateTime      = DateTime.Now,
                                            Role            = _roleService.GetRoleEnCode(user.RoleId),
                                            ActiveSystemId  = systemType.Id,
                                            CurrentLoginIP  = strIp,
                                            IPAddressName   = ipAddressName,
                                            ActiveSystemUrl = systemType.Url
                                        };
                                        TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;
                                        yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);
                                        CurrentUser    = currentSession;
                                        result.ResData = currentSession;
                                        result.ErrCode = ErrCode.successCode;
                                        result.Success = true;
                                    }
                                    else
                                    {
                                        result.ErrCode = ErrCode.failCode;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(ToJsonContent(result));
        }
Exemplo n.º 6
0
        public IActionResult GetUserInfo()
        {
            CommonResult      result            = new CommonResult();
            User              user              = _userService.Get(CurrentUser.UserId);
            YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
            SystemType        systemType        = _systemTypeService.Get(CurrentUser.ActiveSystemId);
            YuebonCurrentUser currentSession    = new YuebonCurrentUser
            {
                UserId         = user.Id,
                Account        = user.Account,
                Name           = user.RealName,
                NickName       = user.NickName,
                AccessToken    = CurrentUser.AccessToken,
                AppKey         = CurrentUser.AppKey,
                CreateTime     = DateTime.Now,
                HeadIcon       = user.HeadIcon,
                Gender         = user.Gender,
                ReferralUserId = user.ReferralUserId,
                MemberGradeId  = user.MemberGradeId,
                Role           = _roleService.GetRoleEnCode(user.RoleId),
                MobilePhone    = user.MobilePhone,
                OrganizeId     = user.OrganizeId,
                DeptId         = user.DepartmentId,
                CurrentLoginIP = CurrentUser.CurrentLoginIP,
                IPAddressName  = CurrentUser.IPAddressName,
                TenantId       = ""
            };

            CurrentUser = currentSession;

            CurrentUser.ActiveSystemId  = systemType.Id;
            CurrentUser.ActiveSystem    = systemType.FullName;
            CurrentUser.ActiveSystemUrl = systemType.Url;

            List <MenuOutputDto> listFunction = new List <MenuOutputDto>();
            MenuApp menuApp = new MenuApp();

            if (Permission.IsAdmin(CurrentUser))
            {
                CurrentUser.SubSystemList = _systemTypeService.GetAllByIsNotDeleteAndEnabledMark().MapTo <SystemTypeOutputDto>();
                //取得用户可使用的授权功能信息,并存储在缓存中
                listFunction            = menuApp.GetFunctionsBySystem(CurrentUser.ActiveSystemId);
                CurrentUser.MenusRouter = menuApp.GetVueRouter("", systemType.EnCode);
            }
            else
            {
                CurrentUser.SubSystemList = _systemTypeService.GetSubSystemList(user.RoleId);
                //取得用户可使用的授权功能信息,并存储在缓存中
                listFunction            = menuApp.GetFunctionsByUser(user.Id, CurrentUser.ActiveSystemId);
                CurrentUser.MenusRouter = menuApp.GetVueRouter(user.RoleId, systemType.EnCode);
            }
            UserLogOn userLogOn = _userLogOnService.GetByUserId(CurrentUser.UserId);

            CurrentUser.UserTheme = userLogOn.Theme == null ? "default" : userLogOn.Theme;
            TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;

            yuebonCacheHelper.Add("User_Function_" + user.Id, listFunction, expiresSliding, true);
            List <string> listModules = new List <string>();

            foreach (MenuOutputDto item in listFunction)
            {
                listModules.Add(item.EnCode);
            }
            CurrentUser.Modules = listModules;
            yuebonCacheHelper.Add("login_user_" + user.Id, CurrentUser, expiresSliding, true);
            //该用户的数据权限
            List <String> roleDateList = _roleDataService.GetListDeptByRole(user.RoleId);

            yuebonCacheHelper.Add("User_RoleData_" + user.Id, roleDateList, expiresSliding, true);
            result.ResData = CurrentUser;
            result.ErrCode = ErrCode.successCode;
            result.Success = true;
            return(ToJsonContent(result, true));
        }
Exemplo n.º 7
0
        /// <summary>
        /// 重写基类在Action执行之前的事情
        /// 根据token获得当前用户,允许匿名的不需要获取用户
        /// </summary>
        /// <param name="context">重写方法的参数</param>
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            try
            {
                var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
                //匿名访问,不需要token认证、签名和登录
                var allowanyone = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(AllowAnonymousAttribute), true);
                if (allowanyone != null)
                {
                    return;
                }

                CommonResult result = new CommonResult();
                //需要token认证
                string authHeader = context.HttpContext.Request.Headers["Authorization"];//Header中的token
                if (string.IsNullOrEmpty(authHeader))
                {
                    result.ErrCode = "40004";
                    result.ErrMsg  = ErrCode.err40004;
                    context.Result = ToJsonContent(result);
                    return;
                }
                else
                {
                    string token = string.Empty;
                    if (authHeader != null && authHeader.StartsWith("Bearer ", StringComparison.Ordinal))
                    {
                        token = authHeader.Substring(7);
                    }
                    TokenProvider tokenProvider = new TokenProvider();
                    result = tokenProvider.ValidateToken(token);
                    //token验证失败
                    if (!result.Success)
                    {
                        context.Result = ToJsonContent(result);
                    }
                    else
                    {
                        #region 签名验证
                        bool boolSign = context.HttpContext.Request.Headers["sign"].SingleOrDefault().ToBool(true);
                        var  isSign   = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoSignRequiredAttribute), true);
                        //需要签名验证
                        if (isSign == null && boolSign)
                        {
                            CommonResult resultSign = SignHelper.CheckSign(context.HttpContext);
                            if (!resultSign.Success)
                            {
                                context.Result = ToJsonContent(resultSign);
                                return;
                            }
                        }
                        #endregion

                        #region 是否需要验证用户登录以及相关的功能权限
                        //是否需要用户登录
                        var isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoPermissionRequiredAttribute));
                        //不需要登录
                        if (isDefined != null)
                        {
                            return;
                        }
                        //需要登录和验证功能权限
                        if (result.ResData != null)
                        {
                            List <Claim> claimlist = result.ResData as List <Claim>;
                            string       userId    = claimlist[3].Value;

                            var claims = new[] {
                                new Claim(YuebonClaimTypes.UserId, userId),
                                new Claim(YuebonClaimTypes.UserName, claimlist[2].Value),
                                new Claim(YuebonClaimTypes.Role, claimlist[4].Value)
                            };
                            var identity  = new ClaimsIdentity(claims);
                            var principal = new ClaimsPrincipal(identity);
                            context.HttpContext.User = principal;
                            YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                            var user = yuebonCacheHelper.Get <YuebonCurrentUser>("login_user_" + userId);
                            if (user != null)
                            {
                                CurrentUser = user;
                            }
                            bool isAdmin = Permission.IsAdmin(user);
                            if (!isAdmin)
                            {
                                var authorizeAttributes = controllerActionDescriptor.MethodInfo.GetCustomAttributes(typeof(YuebonAuthorizeAttribute), true).OfType <YuebonAuthorizeAttribute>();
                                if (authorizeAttributes.FirstOrDefault() != null)
                                {
                                    string function = authorizeAttributes.First().Function;
                                    if (!string.IsNullOrEmpty(function))
                                    {
                                        string functionCode = controllerActionDescriptor.ControllerName + "/" + function;

                                        bool bl = Permission.HasFunction(functionCode, userId);
                                        if (!bl)
                                        {
                                            result.ErrCode = "40006";
                                            result.ErrMsg  = ErrCode.err40006;
                                            context.Result = ToJsonContent(result);
                                        }
                                    }
                                }
                            }
                            return;
                        }
                        else
                        {
                            result.ErrCode = "40008";
                            result.ErrMsg  = ErrCode.err40008;
                            context.Result = ToJsonContent(result);
                        }
                        #endregion
                    }
                    return;
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("", ex);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 授权验证
        /// </summary>
        /// <param name="context"></param>
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
            //匿名访问,不需要token认证、签名和登录
            var allowanyone = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(AllowAnonymousAttribute), true);

            if (allowanyone != null)
            {
                return;
            }
            CommonResult          result  = new CommonResult();
            JsonSerializerOptions options = new JsonSerializerOptions()
            {
                WriteIndented       = true,                             //格式化json字符串
                AllowTrailingCommas = true,                             //可以结尾有逗号
                //IgnoreNullValues = true,                              //可以有空值,转换json去除空值属性
                IgnoreReadOnlyProperties    = true,                     //忽略只读属性
                PropertyNameCaseInsensitive = true,                     //忽略大小写
                                                                        //PropertyNamingPolicy = JsonNamingPolicy.CamelCase     //命名方式是默认还是CamelCase
                Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
            };

            options.Converters.Add(new DateTimeJsonConverter());

            //需要token认证
            string authHeader = context.HttpContext.Request.Headers["Authorization"];//Header中的token

            if (string.IsNullOrEmpty(authHeader))
            {
                result.ErrCode = "40004";
                result.ErrMsg  = ErrCode.err40004;
                context.Result = new JsonResult(result, options);
                return;
            }
            else
            {
                string token = string.Empty;
                if (authHeader != null)
                {
                    token = authHeader.Substring(7);
                }
                TokenProvider tokenProvider = new TokenProvider();
                result = tokenProvider.ValidateToken(token);
                //token验证失败
                if (!result.Success)
                {
                    context.Result = new JsonResult(result, options);
                }
                else
                {
                    #region 签名验证
                    bool boolSign = context.HttpContext.Request.Headers["sign"].SingleOrDefault().ToBool(true);
                    var  isSign   = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoSignRequiredAttribute), true);
                    //需要签名验证
                    if (isSign == null && boolSign)
                    {
                        CommonResult resultSign = SignHelper.CheckSign(context.HttpContext);
                        if (!resultSign.Success)
                        {
                            context.Result = new JsonResult(resultSign, options);
                            return;
                        }
                    }
                    #endregion
                    #region 是否需要验证用户登录以及相关的功能权限
                    //是否需要用户登录
                    var isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoPermissionRequiredAttribute));
                    //不需要登录
                    if (isDefined != null)
                    {
                        return;
                    }
                    //需要登录和验证功能权限
                    if (result.ResData != null)
                    {
                        List <Claim>      claimlist = result.ResData as List <Claim>;
                        string            userId    = claimlist[3].Value;
                        YuebonCurrentUser user      = new YuebonCurrentUser
                        {
                            UserId  = userId,
                            Account = claimlist[2].Value,
                            Role    = claimlist[4].Value
                        };

                        var claims = new[] {
                            new Claim(YuebonClaimTypes.UserId, userId),
                            new Claim(YuebonClaimTypes.UserName, claimlist[2].Value),
                            new Claim(YuebonClaimTypes.Role, claimlist[4].Value)
                        };
                        var identity  = new ClaimsIdentity(claims);
                        var principal = new ClaimsPrincipal(identity);
                        context.HttpContext.User = principal;
                        bool isAdmin = Permission.IsAdmin(user);
                        if (!isAdmin)
                        {
                            var authorizeAttributes = controllerActionDescriptor.MethodInfo.GetCustomAttributes(typeof(YuebonAuthorizeAttribute), true).OfType <YuebonAuthorizeAttribute>();
                            if (authorizeAttributes.FirstOrDefault() != null)
                            {
                                string function = authorizeAttributes.First().Function;
                                if (!string.IsNullOrEmpty(function))
                                {
                                    string functionCode = controllerActionDescriptor.ControllerName + "/" + function;

                                    bool bl = Permission.HasFunction(functionCode, userId);
                                    if (!bl)
                                    {
                                        result.ErrCode = "40006";
                                        result.ErrMsg  = ErrCode.err40006;
                                        context.Result = new JsonResult(result, options);
                                    }
                                }
                            }
                        }
                        return;
                    }
                    else
                    {
                        result.ErrCode = "40008";
                        result.ErrMsg  = ErrCode.err40008;
                        context.Result = new JsonResult(result, options);
                    }
                    #endregion
                }
                return;
            }
        }
Exemplo n.º 9
0
        public IActionResult LoginByOpenId(string openId)
        {
            CommonResult result = new CommonResult();

            try
            {
                YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                User user = userService.GetUserByOpenId("yuebon.openid.wxapplet", openId);
                if (user == null)
                {
                    UserInputDto userInput = new UserInputDto();
                    userInput.OpenId     = openId;
                    userInput.OpenIdType = "yuebon.openid.wxapplet";
                    userInput.NickName   = "游客";
                    result.Success       = userService.CreateUserByWxOpenId(userInput);
                }
                string userId = string.Empty;
                if (result.ResData != null)
                {
                    userId = result.ResData.ToString();
                }
                if (user == null)
                {
                    user = userService.GetUserByOpenId("yuebon.openid.wxapplet", openId);
                }
                var currentSession = (YuebonCurrentUser)yuebonCacheHelper.Get("login_user_" + user.Id);
                if (currentSession == null || string.IsNullOrWhiteSpace(currentSession.AccessToken))
                {
                    JwtOption     jwtModel      = App.GetService <JwtOption>();
                    TokenProvider tokenProvider = new TokenProvider(jwtModel);
                    TokenResult   tokenResult   = tokenProvider.LoginToken(user, "wxapplet");
                    currentSession = new YuebonCurrentUser
                    {
                        UserId         = user.Id,
                        Account        = user.Account,
                        Name           = user.RealName,
                        NickName       = user.NickName,
                        AccessToken    = tokenResult.AccessToken,
                        AppKey         = "wxapplet",
                        CreateTime     = DateTime.Now,
                        HeadIcon       = user.HeadIcon,
                        Gender         = user.Gender,
                        ReferralUserId = user.ReferralUserId,
                        MemberGradeId  = user.MemberGradeId,
                        Role           = roleService.GetRoleEnCode(user.RoleId),
                        MobilePhone    = user.MobilePhone
                    };
                    TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;
                    yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);
                }
                CurrentUser    = currentSession;
                result.ErrCode = ErrCode.successCode;
                result.Success = true;
                result.ResData = currentSession; //new AuthorizeApp().GetAccessedControls(user.Account);
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("微信登录异常 LoginByOpenId", ex);
                result.ErrMsg  = "微信登录异常:" + ex.Message;
                result.ErrCode = ErrCode.successCode;
            }

            return(ToJsonContent(result));
        }
Exemplo n.º 10
0
        public IActionResult QuikLogin(WxUserInfo info)
        {
            CommonResult result = new CommonResult();

            try
            {
                if (info != null)
                {
                    DecodedUserInfo decodedUserInfo = EncryptHelper.DecodeUserInfoBySessionId(info.SessionId, info.EncryptedData, info.Iv);

                    UserInputDto userInput = new UserInputDto();
                    userInput.NickName       = decodedUserInfo.nickName;
                    userInput.HeadIcon       = decodedUserInfo.avatarUrl;
                    userInput.Gender         = decodedUserInfo.gender;
                    userInput.Country        = decodedUserInfo.country;
                    userInput.Province       = decodedUserInfo.province;
                    userInput.City           = decodedUserInfo.city;
                    userInput.language       = info.language;
                    userInput.OpenId         = decodedUserInfo.openId;
                    userInput.OpenIdType     = "yuebon.openid.wxapplet";
                    userInput.ReferralUserId = info.ReferralUserId;
                    userInput.UnionId        = decodedUserInfo.unionId;
                    User user = userService.GetUserByOpenId(userInput.OpenIdType, decodedUserInfo.openId);
                    if (user == null)
                    {
                        result.Success = userService.CreateUserByWxOpenId(userInput);
                    }
                    else
                    {
                        result.Success = userService.UpdateUserByOpenId(userInput);
                    }
                    user = userService.GetUserByOpenId(info.openIdType, info.openId);
                    if (user != null)
                    {
                        JwtOption     jwtModel       = App.GetService <JwtOption>();
                        TokenProvider tokenProvider  = new TokenProvider(jwtModel);
                        TokenResult   tokenResult    = tokenProvider.LoginToken(user, "wxapplet");
                        var           currentSession = new YuebonCurrentUser
                        {
                            UserId         = user.Id,
                            Account        = user.Account,
                            Name           = user.RealName,
                            NickName       = user.NickName,
                            AccessToken    = tokenResult.AccessToken,
                            AppKey         = "wxapplet",
                            CreateTime     = DateTime.Now,
                            HeadIcon       = user.HeadIcon,
                            Gender         = user.Gender,
                            ReferralUserId = user.ReferralUserId,
                            MemberGradeId  = user.MemberGradeId,
                            Role           = roleService.GetRoleEnCode(user.RoleId)
                        };

                        CurrentUser = currentSession;
                        YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                        TimeSpan          expiresSliding    = DateTime.Now.AddMinutes(120) - DateTime.Now;
                        yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);
                        result.ErrCode = ErrCode.successCode;
                        result.ResData = currentSession;
                        result.Success = true;
                    }
                    else
                    {
                        result.ErrCode = ErrCode.failCode;
                    }
                }
            }catch (Exception ex)
            {
                Log4NetHelper.Error("微信快速(一键)登录异常", ex);
                result.ErrMsg  = "微信快速(一键)登录:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            return(ToJsonContent(result));
        }
Exemplo n.º 11
0
        public IActionResult OnLogin(string code)
        {
            CommonResult result = new CommonResult();

            try
            {
                var jsonResult = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code);
                if (jsonResult.errcode == ReturnCode.请求成功)
                {
                    //使用SessionContainer管理登录信息(推荐)
                    var unionId    = jsonResult.unionid;
                    var sessionBag = SessionContainer.UpdateSession(null, jsonResult.openid, jsonResult.session_key, unionId);

                    //注意:生产环境下SessionKey属于敏感信息,不能进行传输!
                    //return Json(new { success = true, msg = "OK", sessionId = sessionBag.Key, sessionKey = sessionBag.SessionKey });

                    YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                    //User user = userApp.GetUserByUnionId(unionId);
                    User user = userService.GetUserByOpenId("yuebon.openid.wxapplet", jsonResult.openid);
                    if (user == null)
                    {
                        UserInputDto userInput = new UserInputDto();
                        userInput.OpenId     = jsonResult.openid;
                        user.UnionId         = jsonResult.unionid;
                        userInput.OpenIdType = "yuebon.openid.wxapplet";
                        userInput.NickName   = "游客";
                        userInput.UnionId    = jsonResult.unionid;
                        result.Success       = userService.CreateUserByWxOpenId(userInput);
                    }
                    //针对老用户更新UnionId
                    if (user != null && string.IsNullOrEmpty(user.UnionId))
                    {
                        user.UnionId   = jsonResult.unionid;
                        result.Success = userService.Update(user, user.Id);
                    }
                    string userId = string.Empty;
                    if (result.ResData != null)
                    {
                        userId = result.ResData.ToString();
                    }
                    if (user == null)
                    {
                        user = userService.GetUserByOpenId("yuebon.openid.wxapplet", jsonResult.openid);
                    }

                    var currentSession = (YuebonCurrentUser)(yuebonCacheHelper.Get("login_user_" + userId));
                    if (currentSession == null || string.IsNullOrWhiteSpace(currentSession.AccessToken))
                    {
                        JwtOption     jwtModel      = App.GetService <JwtOption>();
                        TokenProvider tokenProvider = new TokenProvider(jwtModel);
                        TokenResult   tokenResult   = tokenProvider.LoginToken(user, "wxapplet");
                        currentSession = new YuebonCurrentUser
                        {
                            UserId         = user.Id,
                            Account        = user.Account,
                            Name           = user.RealName,
                            NickName       = user.NickName,
                            AccessToken    = tokenResult.AccessToken,
                            AppKey         = "wxapplet",
                            CreateTime     = DateTime.Now,
                            HeadIcon       = user.HeadIcon,
                            Gender         = user.Gender,
                            ReferralUserId = user.ReferralUserId,
                            MemberGradeId  = user.MemberGradeId,
                            Role           = roleService.GetRoleEnCode(user.RoleId),
                            MobilePhone    = user.MobilePhone,
                            WxSessionId    = sessionBag.Key
                        };
                        TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now;
                        yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true);
                    }
                    CurrentUser    = currentSession;
                    result.ResData = currentSession; //new AuthorizeApp().GetAccessedControls(user.Account);
                    result.ErrCode = ErrCode.successCode;
                    result.Success = true;
                }
                else
                {
                    result.ErrCode = ErrCode.failCode;
                    result.ErrMsg  = jsonResult.errmsg;
                }
            }
            catch (Exception ex)
            {
                result.ErrMsg = ex.Message;
            }

            return(ToJsonContent(result));
        }
Exemplo n.º 12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        public override void OnException(ExceptionContext context)
        {
            var exception = context.Exception;
            YuebonCurrentUser currentUser = new YuebonCurrentUser();
            string            requestPath = context.HttpContext.Request.Path.ToString();
            string            queryString = context.HttpContext.Request.QueryString.ToString();
            var    type   = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            string exDesc = requestPath + queryString;

            Log4NetHelper.Error(type, "全局捕获程序运行异常信息\n\r" + exDesc, context.Exception);
            CommonResult result = new CommonResult();

            if (exception is MyApiException myApiex)
            {
                context.HttpContext.Response.StatusCode = 200;
                context.ExceptionHandled = true;
                result.ErrMsg            = myApiex.Msg;
                result.ErrCode           = myApiex.ErrCode;
            }
            else
            {
                result.ErrMsg  = "程序异常,服务端出现异常![异常消息]" + exception.Message;
                result.ErrCode = "500";
            }
            JsonSerializerOptions options = new JsonSerializerOptions()
            {
                WriteIndented       = true,                             //格式化json字符串
                AllowTrailingCommas = true,                             //可以结尾有逗号
                //IgnoreNullValues = true,                              //可以有空值,转换json去除空值属性
                IgnoreReadOnlyProperties    = true,                     //忽略只读属性
                PropertyNameCaseInsensitive = true,                     //忽略大小写
                                                                        //PropertyNamingPolicy = JsonNamingPolicy.CamelCase     //命名方式是默认还是CamelCase
                Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
            };

            options.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss"));
            context.Result = new JsonResult(result, options);
            Log logEntity      = new Log();
            var identities     = context.HttpContext.User.Identities;
            var claimsIdentity = identities.First <ClaimsIdentity>();

            if (claimsIdentity != null)
            {
                List <Claim> claimlist = claimsIdentity.Claims as List <Claim>;
                if (claimlist.Count > 0)
                {
                    string            userId            = claimlist[0].Value;
                    YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
                    var user = yuebonCacheHelper.Get("login_user_" + userId).ToJson().ToObject <YuebonCurrentUser>();
                    if (user != null)
                    {
                        currentUser = user;
                    }
                }
            }
            logEntity.Account       = currentUser.Account;
            logEntity.NickName      = currentUser.NickName;
            logEntity.Date          = logEntity.CreatorTime = DateTime.Now;
            logEntity.IPAddress     = currentUser.CurrentLoginIP;
            logEntity.IPAddressName = currentUser.IPAddressName;
            logEntity.Result        = false;
            logEntity.Description   = $"请求:{exDesc}\r\n异常类型:{exception.GetType().Name} \r\n异常信息:{exception.Message} \r\n【堆栈调用】:\r\n{exception.StackTrace}";
            logEntity.Type          = "Exception";
            service.Insert(logEntity);
        }