Exemple #1
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="taskId">任务标识</param>
        /// <param name="userInfo">用户</param>
        /// <param name="companyName">单位名称</param>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="openId">单点登录标识</param>
        /// <param name="createOpenId">重新创建单点登录标识</param>
        /// <param name="ipAddress">IP地址</param>
        /// <returns>登录实体类</returns>
        public UserLogOnResult LogOnByCompany(string taskId, BaseUserInfo userInfo, string companyName, string userName, string password, string openId, bool createOpenId)
        {
            UserLogOnResult result = new UserLogOnResult();

            var parameter = ServiceInfo.Create(taskId, userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessUserCenterWriteDb(userInfo, parameter, (dbHelper) =>
            {
                // 先侦测是否在线
                // userLogOnManager.CheckOnLine();
                // 再进行登录
                var userManager = new BaseUserManager(userInfo);
                userManager.CheckIsAdministrator = true;
                result = userManager.LogOnByCompany(companyName, userName, password, openId, createOpenId, userInfo.SystemCode, GetRemoteIP());
                // 张祈璟20130619添加
                //if (returnUserInfo != null)
                //{
                //    returnUserInfo.CloneData(userInfo);
                //    result.UserInfo = returnUserInfo;
                //}
                // 登录时会自动记录进行日志记录,所以不需要进行重复日志记录
                // BaseLogManager.Instance.Add(result, this.serviceName, MethodBase.GetCurrentMethod());
            });

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// 用户修改密码
        /// </summary>
        /// <param name="taskId">任务标识</param>
        /// <param name="userInfo">用户</param>
        /// <param name="oldPassword">原始密码</param>
        /// <param name="newPassword">新密码</param>
        /// <returns>影响行数</returns>
        public UserLogOnResult ChangePassword(string taskId, BaseUserInfo userInfo, string oldPassword, string newPassword)
        {
            UserLogOnResult result = null;

            var parameter = ServiceInfo.Create(taskId, userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessUserCenterWriteDb(userInfo, parameter, (dbHelper) =>
            {
                // 事务开始
                // dbHelper.BeginTransaction();
                var userManager = new BaseUserManager(dbHelper, userInfo);
                result          = new UserLogOnResult();
                result.UserInfo = userManager.ChangePassword(userInfo.Id, oldPassword, newPassword);

                // 获取登录后信息
                // result.Message = BaseParameterManager.GetParameterByCache("BaseNotice", "System", "LogOn", "Message");
                // 获得状态消息
                result.StatusCode    = userManager.StatusCode;
                result.StatusMessage = userManager.GetStateMessage();
                // 事务提交
                // dbHelper.CommitTransaction();
            });

            return(result);
        }
Exemple #3
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="taskId">任务标识</param>
        /// <param name="userInfo">用户</param>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="openId">单点登录标识</param>
        /// <param name="createOpenId">重新创建单点登录标识</param>
        /// <param name="ipAddress">IP地址</param>
        /// <returns>登录实体类</returns>
        public UserLogOnResult UserLogOn(string taskId, BaseUserInfo userInfo, string userName, string password, string openId, bool createOpenId)
        {
            UserLogOnResult result = new UserLogOnResult();

            var parameter = ServiceInfo.Create(taskId, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessUserCenterWriteDb(userInfo, parameter, (dbHelper) =>
            {
                var userManager = new BaseUserManager(userInfo);
                userManager.CheckIsAdministrator = true;
                result = userManager.LogOnByUserName(userName, password, openId, createOpenId);
                // 2016-02-16 吉日嘎拉 记录用户日志用
                parameter.UserInfo = result.UserInfo;
            });

            return(result);
        }
Exemple #4
0
        /// <summary>
        /// 按唯一识别码登录
        /// </summary>
        /// <param name="taskId">任务标识</param>
        /// <param name="userInfo">用户</param>
        /// <param name="openId">唯一识别码</param>
        /// <returns>用户实体</returns>
        public UserLogOnResult LogOnByOpenId(string taskId, BaseUserInfo userInfo, string openId)
        {
            UserLogOnResult result = new UserLogOnResult();

            var parameter = ServiceInfo.Create(taskId, userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessUserCenterWriteDb(userInfo, parameter, (dbHelper) =>
            {
                // 先侦测是否在线
                BaseUserLogOnManager userLogOnManager = new BaseUserLogOnManager();
                userLogOnManager.CheckOnLine();
                // 若是单点登录,那就不能判断ip地址,因为不是直接登录,是间接登录
                var userManager = new BaseUserManager(userInfo);
                result          = userManager.LogOnByOpenId(openId, string.Empty, string.Empty);
            });

            return(result);
        }
Exemple #5
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="taskId">任务标识</param>
        /// <param name="userInfo">用户</param>
        /// <param name="nickName">昵称</param>
        /// <param name="password">密码</param>
        /// <param name="openId">单点登录标识</param>
        /// <param name="createOpenId">重新创建单点登录标识</param>
        /// <param name="ipAddress">IP地址</param>
        /// <returns>登录实体类</returns>
        public UserLogOnResult LogOnByNickName(string taskId, BaseUserInfo userInfo, string nickName, string password, string openId, bool createOpenId)
        {
            UserLogOnResult result = new UserLogOnResult();

            var parameter = ServiceInfo.Create(taskId, userInfo, MethodBase.GetCurrentMethod());

            ServiceUtil.ProcessUserCenterWriteDb(userInfo, parameter, (dbHelper) =>
            {
                // 先侦测是否在线
                // userLogOnManager.CheckOnLine();
                // 再进行登录
                var userManager = new BaseUserManager(userInfo);
                userManager.CheckIsAdministrator = true;
                result = userManager.LogOnByNickName(nickName, password, openId, createOpenId);
            });

            return(result);
        }
Exemple #6
0
        /// <summary>
        /// 检查一个服务调用是否是允许调用的?
        /// 1:是否要记录日志?
        /// 2:是否需要埋点?检查性能?访问频率等?调用次数?
        /// 3:非合法的调用?是否日志记录?
        /// 4:异常的要进行处理?
        /// </summary>
        /// <param name="appKey">应用唯一标识</param>
        /// <param name="appSecret">应用的签名密钥</param>
        /// <param name="callLimit">是否进行限制</param>
        /// <param name="systemCode">访问子系统</param>
        /// <param name="permissionCode">判断的权限编号</param>
        /// <returns>验证情况</returns>
        public static BaseResult CheckService(string appKey, string appSecret, bool callLimit = false, string systemCode = "Base", string permissionCode = null)
        {
            BaseResult result = new DotNet.Utilities.BaseResult();

            result.Status = false;

            // AppKey: 23286115
            // AppSecret: c8d1f06f599d7370467993c72a34c701
            // permissionCode: "User.Add"

            string ipAddress = Utilities.GetIPAddress(true);

            // 1: 判断参数是否合理?目标服务,总不可以为空,否则怎么区别谁在调用这个服务了?
            if (string.IsNullOrEmpty(appKey))
            {
                result.StatusCode    = "AccessDeny";
                result.StatusMessage = "appKey为空、访问被拒绝";
                return(result);
            }

            // 2: 判断是否在接口角色里, 只有在接口角色里的,才可以进行远程调用,这样也方便把接口随时踢出来。
            string roleCode = "Interface";

            if (!BaseUserManager.IsInRoleByCache(systemCode, appKey, roleCode))
            {
                result.StatusCode    = "AccessDeny";
                result.StatusMessage = "非接口用户、访问被拒绝";
                return(result);
            }

            // 3: 判断调用的频率是否?这里需要高速判断,不能总走数据库?调用的效率要高,不能被远程接口给拖死了、自己的服务都不正常了。
            if (callLimit && PooledRedisHelper.CallLimit(appKey, 10, 10000))
            {
                result.StatusCode    = "AccessDeny";
                result.StatusMessage = "访问频率过高、访问被拒绝";
                return(result);
            }

            // 4: 判断签名是否有效?是否过期?可以支持多个签名,容易升级、容易兼容、容易有个过度的缓冲期。为了提高安全性,必须要有签名才对。
            if (!BaseServicesLicenseManager.CheckServiceByCache(appKey, appSecret))
            {
                result.StatusCode    = "AccessDeny";
                result.StatusMessage = "不合法签名、访问被拒绝";
                return(result);
            }

            // 5: 判断对方的ip是否合法的?1个服务程序,可以有多个ip。可以把服务当一个用户看待,一个目标用户可能也配置了多个服务,一般是远程连接。
            BaseUserLogOnManager userLogOnManager = new BaseUserLogOnManager();
            BaseUserLogOnEntity  userLogOnEntity  = userLogOnManager.GetObject(appKey);

            if (BaseUserManager.CheckIPAddressByCache(userLogOnEntity, ipAddress, true))
            {
                result.StatusCode    = "AccessDeny";
                result.StatusMessage = "不合法IP、访问被拒绝";
                return(result);
            }

            // 6: 判断是否有权限?防止被过渡调用,拖死数据库,可以用缓存的方式进行判断,这样不容易被客户端、合作伙伴拖垮。
            if (!string.IsNullOrEmpty(permissionCode) && !BasePermissionManager.IsAuthorizedByCache(systemCode, appKey, permissionCode))
            {
                result.StatusCode    = "AccessDeny";
                result.StatusMessage = "无权限 " + permissionCode + "、访问被拒绝";
                return(result);
            }

            // 7: 判断是否有效?判断时间是否对?
            BaseUserManager userManager     = new BaseUserManager();
            BaseUserEntity  userEntity      = userManager.GetObject(appKey);
            UserLogOnResult userLogOnResult = userManager.CheckUser(userEntity, userLogOnEntity);

            if (!string.IsNullOrEmpty(userLogOnResult.StatusCode))
            {
                BaseLoginLogManager.AddLog(systemCode, userEntity, ipAddress, string.Empty, string.Empty, userLogOnResult.StatusMessage);
                result.StatusCode    = userLogOnResult.StatusCode;
                result.StatusMessage = userLogOnResult.StatusMessage;
                return(result);
            }

            // 8:目前需要判断的,都加上了。
            result.Status = true;
            return(result);
        }
        /// <summary>
        /// 检查用户的登录许可信息
        /// </summary>
        /// <param name="userEntity">用户实体</param>
        /// <param name="userLogOnEntity">用户登录实体</param>
        /// <returns>用户登录信息</returns>
        public UserLogOnResult CheckUser(BaseUserEntity userEntity, BaseUserLogOnEntity userLogOnEntity)
        {
            UserLogOnResult result = new UserLogOnResult();

            int errorMark = 0;

            // 05. 是否允许登录,是否离职是否正确
            if (!string.IsNullOrEmpty(userEntity.AuditStatus) &&
                userEntity.AuditStatus.EndsWith(AuditStatus.WaitForAudit.ToString()))
            {
                result.StatusCode    = AuditStatus.WaitForAudit.ToString();
                result.StatusMessage = AuditStatus.WaitForAudit.ToDescription();
                errorMark            = 1;
                return(result);
            }

            // 用户是否有效的
            if (userEntity.Enabled.HasValue && userEntity.Enabled == 0)
            {
                result.StatusCode    = Status.LogOnDeny.ToString();
                result.StatusMessage = Status.LogOnDeny.ToDescription();
                errorMark            = 2;
                return(result);
            }

            // 用户是否有效的
            if (userEntity.Enabled.HasValue && userEntity.Enabled == -1)
            {
                result.StatusCode    = Status.UserNotActive.ToString();
                result.StatusMessage = Status.UserNotActive.ToDescription();
                errorMark            = 3;
                return(result);
            }

            // 01: 系统是否采用了在线用户的限制, 这里是登录到哪个表里去?
            errorMark = 6;
            // 2015-12-08 吉日嘎拉
            if (userLogOnEntity == null)
            {
                result.StatusCode    = Status.MissingData.ToString();
                result.StatusMessage = Status.MissingData.ToDescription();
                return(result);
            }
            // 06. 允许登录时间是否有限制

            // 2015-05-28 jirigala 子系统的用户是否有效的
            errorMark = 7;
            if (userLogOnEntity.Enabled == 0)
            {
                errorMark            = 8;
                result.StatusCode    = Status.LogOnDeny.ToString();
                result.StatusMessage = Status.LogOnDeny.ToDescription();
                return(result);
            }

            errorMark = 11;
            if (userLogOnEntity.AllowEndTime != null)
            {
                errorMark = 12;
                userLogOnEntity.AllowEndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, userLogOnEntity.AllowEndTime.Value.Hour, userLogOnEntity.AllowEndTime.Value.Minute, userLogOnEntity.AllowEndTime.Value.Second);
            }

            errorMark = 13;
            if (userLogOnEntity.AllowStartTime != null)
            {
                errorMark = 14;
                userLogOnEntity.AllowStartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, userLogOnEntity.AllowStartTime.Value.Hour, userLogOnEntity.AllowStartTime.Value.Minute, userLogOnEntity.AllowStartTime.Value.Second);
                errorMark = 15;
                if (DateTime.Now < userLogOnEntity.AllowStartTime)
                {
                    result.StatusCode    = Status.UserLocked.ToString();
                    result.StatusMessage = Status.UserLocked.ToDescription();
                    errorMark            = 17;
                    return(result);
                }
            }

            errorMark = 18;
            if (userLogOnEntity.AllowEndTime != null)
            {
                errorMark = 19;
                if (DateTime.Now > userLogOnEntity.AllowEndTime)
                {
                    result.StatusCode    = Status.UserLocked.ToString();
                    result.StatusMessage = Status.UserLocked.ToDescription();
                    errorMark            = 20;
                    return(result);
                }
            }

            // 07. 锁定日期是否有限制
            errorMark = 21;
            if (userLogOnEntity.LockStartDate != null)
            {
                errorMark = 22;
                if (DateTime.Now > userLogOnEntity.LockStartDate)
                {
                    errorMark = 23;
                    if (userLogOnEntity.LockEndDate == null || DateTime.Now < userLogOnEntity.LockEndDate)
                    {
                        result.StatusCode    = Status.UserLocked.ToString();
                        result.StatusMessage = Status.UserLocked.ToDescription();;
                        errorMark            = 24;
                        return(result);
                    }
                }
            }

            errorMark = 25;
            if (userLogOnEntity.LockEndDate != null)
            {
                errorMark = 26;
                if (DateTime.Now < userLogOnEntity.LockEndDate)
                {
                    errorMark            = 27;
                    result.StatusCode    = Status.UserLocked.ToString();
                    result.StatusMessage = Status.UserLocked.ToDescription();
                    errorMark            = 28;
                    return(result);
                }
            }

            result.StatusCode    = Status.OK.ToString();
            result.StatusMessage = Status.OK.ToDescription();
            return(result);
        }