Exemplo n.º 1
0
        /// <summary>
        /// 添加用户
        /// </summary>
        /// <param name="entity">用户实体</param>
        /// <returns>主键</returns>
        public string Add(BaseUserEntity entity)
        {
            string result = string.Empty;

            this.BeforeAdd(entity);

            if (this.StatusCode == Status.OKAdd.ToString())
            {
                result = this.AddObject(entity);

                // 用户访问表里,插入一条记录
                BaseUserLogOnEntity userLogOnEntity = new BaseUserLogOnEntity();
                userLogOnEntity.Id        = entity.Id;
                userLogOnEntity.CompanyId = entity.CompanyId;
                // 把一些默认值读取到,系统的默认值,这样增加用户时可以把系统的默认值带入
                userLogOnEntity.MultiUserLogin = BaseSystemInfo.CheckOnLine ? 0 : 1;
                userLogOnEntity.CheckIPAddress = BaseSystemInfo.CheckIPAddress ? 1 : 0;
                //此处设置密码强度级别
                userLogOnEntity.PasswordStrength = SecretUtil.GetUserPassWordRate(userLogOnEntity.UserPassword);
                // 若是系统需要用加密的密码,这里需要加密密码。
                if (BaseSystemInfo.ServerEncryptPassword)
                {
                    userLogOnEntity.UserPassword = this.EncryptUserPassword(entity.UserPassword);
                    // 安全通讯密码、交易密码也生成好
                    // userLogOnEntity.UserPassword = this.EncryptUserPassword(entity.CommunicationPassword);
                }

                new BaseUserLogOnManager(this.DbHelper, this.UserInfo).Add(userLogOnEntity);

                this.AfterAdd(entity);
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 添加用户
        /// </summary>
        /// <param name="entity">用户实体</param>
        /// <param name="userLogonEntity"></param>
        /// <returns>主键</returns>
        public string AddUser(BaseUserEntity entity, BaseUserLogonEntity userLogonEntity = null)
        {
            var result = string.Empty;

            BeforeAdd(entity);

            if (StatusCode == Status.OkAdd.ToString())
            {
                //添加用户
                result = AddEntity(entity);

                // 用户登录表里,插入一条记录
                if (userLogonEntity == null)
                {
                    userLogonEntity = new BaseUserLogonEntity();
                }
                userLogonEntity.UserId = result.ToInt();
                //userLogonEntity.CompanyId = entity.CompanyId;
                //把一些默认值读取到,系统的默认值,这样增加用户时可以把系统的默认值带入
                userLogonEntity.ConcurrentUser = BaseSystemInfo.CheckOnline ? 0 : 1;
                userLogonEntity.CheckIpAddress = BaseSystemInfo.CheckIpAddress ? 1 : 0;
                //此处设置密码强度级别
                userLogonEntity.PasswordStrength = SecretUtil.GetUserPassWordRate(userLogonEntity.UserPassword);
                //密码盐
                userLogonEntity.Salt = RandomUtil.GetString(20);
                // 若是系统需要用加密的密码,这里需要加密密码。
                if (BaseSystemInfo.ServerEncryptPassword)
                {
                    userLogonEntity.UserPassword = EncryptUserPassword(userLogonEntity.UserPassword, userLogonEntity.Salt);
                    // 安全通讯密码、交易密码也生成好
                    // userLogonEntity.UserPassword = this.EncryptUserPassword(entity.CommunicationPassword);
                }
                //// 2016.05.21 吉日嘎拉 完善创建信息
                //userLogonEntity.CreateTime = DateTime.Now;
                //userLogonEntity.UpdateTime = DateTime.Now;
                //if (UserInfo != null)
                //{
                //    userLogonEntity.CreateUserId = UserInfo.UserId;
                //    userLogonEntity.CreateBy = UserInfo.RealName;
                //}
                new BaseUserLogonManager(DbHelper, UserInfo).Add(userLogonEntity);

                AfterAdd(entity);
            }

            return(result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 更新密码
        /// </summary>
        /// <param name="userId">用户主键、方便外部系统调用,若能传递参数过来</param>
        /// <param name="oldPassword">原密码</param>
        /// <param name="newPassword">新密码</param>
        /// <returns>影响行数</returns>
        public virtual BaseUserInfo ChangePassword(string userId, string oldPassword, string newPassword)
        {
            #if (DEBUG)
            int milliStart = Environment.TickCount;
            #endif

            var encryptOldPassword = oldPassword;
            var encryptNewPassword = newPassword;

            BaseUserInfo userInfo = null;
            // 密码强度检查
            if (BaseSystemInfo.CheckPasswordStrength)
            {
                if (string.IsNullOrEmpty(newPassword))
                {
                    Status     = Status.PasswordCanNotBeNull;
                    StatusCode = Status.PasswordCanNotBeNull.ToString();
                    return(userInfo);
                }
            }
            // 判断输入原始密码是否正确
            var entity = new BaseUserLogonManager(DbHelper, UserInfo).GetEntityByUserId(UserInfo.UserId);
            if (entity.UserPassword == null)
            {
                entity.UserPassword = string.Empty;
            }

            // 加密密码
            if (BaseSystemInfo.ServerEncryptPassword)
            {
                encryptOldPassword = EncryptUserPassword(oldPassword, entity.Salt);
            }

            // 密码错误
            if (!entity.UserPassword.Equals(encryptOldPassword, StringComparison.CurrentCultureIgnoreCase))
            {
                Status     = Status.OldPasswordError;
                StatusCode = Status.OldPasswordError.ToString();
                return(userInfo);
            }
            // 对比是否最近2次用过这个密码
            if (BaseSystemInfo.CheckPasswordStrength)
            {
                /*
                 * int i = 0;
                 * BaseParameterManager manager = new BaseParameterManager(this.DbHelper, this.UserInfo);
                 * var dt = manager.GetDataTableParameterCode("User", this.UserInfo.Id, "Password");
                 * foreach (DataRow dr in dt.Rows)
                 * {
                 *  string parameter = dr[BaseParameterEntity.FieldParameterContent].ToString();
                 *  if (parameter.Equals(newPassword))
                 *  {
                 *      this.StatusCode = Status.PasswordCanNotBeRepeat.ToString();
                 *      return userInfo;
                 *  }
                 *  i++;
                 *  {
                 *      // 判断连续2个密码就是可以了
                 *      if (i > 2)
                 *      {
                 *          break;
                 *      }
                 *  }
                 * }
                 */
            }

            // 更改密码,同时修改密码的修改日期,这里需要兼容多数据库
            var salt = string.Empty;
            if (BaseSystemInfo.ServerEncryptPassword)
            {
                salt = RandomUtil.GetString(20);
                encryptNewPassword = EncryptUserPassword(newPassword, salt);
            }
            var sqlBuilder = new SqlBuilder(DbHelper);
            sqlBuilder.BeginUpdate(BaseUserLogonEntity.CurrentTableName);
            if (BaseSystemInfo.ServerEncryptPassword)
            {
                sqlBuilder.SetValue(BaseUserLogonEntity.FieldSalt, salt);
            }
            // 宋彪:此处增加更新密码强度级别
            sqlBuilder.SetValue(BaseUserLogonEntity.FieldPasswordStrength, SecretUtil.GetUserPassWordRate(newPassword));
            sqlBuilder.SetValue(BaseUserLogonEntity.FieldUserPassword, encryptNewPassword);
            // 2015-08-04 吉日嘎拉 修改了密码后,把需要修改密码字段设置为 0
            sqlBuilder.SetValue(BaseUserLogonEntity.FieldNeedModifyPassword, 0);
            sqlBuilder.SetDbNow(BaseUserLogonEntity.FieldChangePasswordTime);
            sqlBuilder.SetDbNow(BaseUserLogonEntity.FieldUpdateTime);
            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseUserLogonEntity.FieldUpdateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseUserLogonEntity.FieldUpdateBy, UserInfo.RealName);
            }
            sqlBuilder.SetWhere(BaseUserLogonEntity.FieldUserId, userId);
            var result = sqlBuilder.EndUpdate();

            if (result == 1)
            {
                // 2015-12-09 吉日嘎拉 确认已经记录了修改密码日志
                // BaseLogonLogManager.AddLog(this.UserInfo, Status.ChangePassword.ToDescription());

                // 2015-12-09 吉日嘎拉 增加日志功能、谁什么时候设置了谁的密码?
                var record = new BaseChangeLogEntity
                {
                    TableName         = BaseUserLogonEntity.CurrentTableName,
                    TableDescription  = FieldExtensions.ToDescription(typeof(BaseUserLogonEntity), "CurrentTableName"),
                    ColumnName        = BaseUserLogonEntity.FieldUserPassword,
                    ColumnDescription = "用户密码",
                    RecordKey         = userId.ToString(),
                    NewValue          = "修改密码"
                };
                var changeLogManager = new BaseChangeLogManager(UserInfo);
                changeLogManager.Add(record, true, false);

                /*
                 * // 若是强类型密码检查,那就保存密码修改历史,防止最近2-3次的密码相同的功能实现。
                 * if (BaseSystemInfo.CheckPasswordStrength)
                 * {
                 *  BaseParameterManager parameterManager = new BaseParameterManager(this.DbHelper, this.UserInfo);
                 *  BaseParameterEntity parameterEntity = new BaseParameterEntity();
                 *  parameterEntity.CategoryCode = "User";
                 *  parameterEntity.ParameterId = this.UserInfo.Id;
                 *  parameterEntity.ParameterCode = "Password";
                 *  parameterEntity.ParameterContent = newPassword;
                 *  parameterEntity.Deleted = 0;
                 *  parameterEntity.Enabled = true;
                 *  parameterManager.AddEntity(parameterEntity);
                 * }
                 */

                userInfo = LogonByOpenId(UserInfo.OpenId, UserInfo.SystemCode).UserInfo;
                // 同步处理其他系统的密码修改动作
                if (BaseSystemInfo.ServerEncryptPassword)
                {
                    // AfterChangePassword(this.UserInfo.Id, salt, oldPassword, newPassword);
                }
                // 修改密码成功,写入状态
                Status     = Status.ChangePasswordOk;
                StatusCode = Status.ChangePasswordOk.ToString();
            }
            else
            {
                // 数据可能被删除
                Status     = Status.ErrorDeleted;
                StatusCode = Status.ErrorDeleted.ToString();
            }

            return(userInfo);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 更新密码
        /// </summary>
        /// <param name="userId">用户主键、方便外部系统调用,若能传递参数过来</param>
        /// <param name="oldPassword">原密码</param>
        /// <param name="newPassword">新密码</param>
        /// <returns>影响行数</returns>
        public virtual BaseUserInfo ChangePassword(string userId, string oldPassword, string newPassword)
        {
            #if (DEBUG)
            int milliStart = Environment.TickCount;
            #endif

            string encryptOldPassword = oldPassword;
            string encryptNewPassword = newPassword;

            BaseUserInfo userInfo = null;
            // 密码强度检查
            if (BaseSystemInfo.CheckPasswordStrength)
            {
                if (String.IsNullOrEmpty(newPassword))
                {
                    this.StatusCode = Status.PasswordCanNotBeNull.ToString();
                    return(userInfo);
                }
            }
            // 判断输入原始密码是否正确
            BaseUserLogOnEntity entity = new BaseUserLogOnManager(this.DbHelper, this.UserInfo).GetObject(UserInfo.Id);
            if (entity.UserPassword == null)
            {
                entity.UserPassword = string.Empty;
            }

            // 加密密码
            if (BaseSystemInfo.ServerEncryptPassword)
            {
                encryptOldPassword = this.EncryptUserPassword(oldPassword, entity.Salt);
            }

            // 密码错误
            if (!entity.UserPassword.Equals(encryptOldPassword, StringComparison.CurrentCultureIgnoreCase))
            {
                this.StatusCode = Status.OldPasswordError.ToString();
                return(userInfo);
            }
            // 对比是否最近2次用过这个密码
            if (BaseSystemInfo.CheckPasswordStrength)
            {
                /*
                 * int i = 0;
                 * BaseParameterManager manager = new BaseParameterManager(this.DbHelper, this.UserInfo);
                 * var dt = manager.GetDataTableParameterCode("User", this.UserInfo.Id, "Password");
                 * foreach (DataRow dr in dt.Rows)
                 * {
                 *  string parameter = dr[BaseParameterEntity.FieldParameterContent].ToString();
                 *  if (parameter.Equals(newPassword))
                 *  {
                 *      this.StatusCode = Status.PasswordCanNotBeRepeat.ToString();
                 *      return userInfo;
                 *  }
                 *  i++;
                 *  {
                 *      // 判断连续2个密码就是可以了
                 *      if (i > 2)
                 *      {
                 *          break;
                 *      }
                 *  }
                 * }
                 */
            }

            // 更改密码,同时修改密码的修改日期,这里需要兼容多数据库
            string salt = string.Empty;
            if (BaseSystemInfo.ServerEncryptPassword)
            {
                salt = BaseRandom.GetRandomString(20);
                encryptNewPassword = this.EncryptUserPassword(newPassword, salt);
            }
            SQLBuilder sqlBuilder = new SQLBuilder(this.DbHelper);
            sqlBuilder.BeginUpdate(BaseUserLogOnEntity.TableName);
            if (BaseSystemInfo.ServerEncryptPassword)
            {
                sqlBuilder.SetValue(BaseUserLogOnEntity.FieldSalt, salt);
            }
            // 宋彪:此处增加更新密码强度级别
            sqlBuilder.SetValue(BaseUserLogOnEntity.FieldPasswordStrength, SecretUtil.GetUserPassWordRate(newPassword));
            sqlBuilder.SetValue(BaseUserLogOnEntity.FieldUserPassword, encryptNewPassword);
            // 2015-08-04 吉日嘎拉 修改了密码后,把需要修改密码字段设置为 0
            sqlBuilder.SetValue(BaseUserLogOnEntity.FieldNeedModifyPassword, 0);
            sqlBuilder.SetDBNow(BaseUserLogOnEntity.FieldChangePasswordDate);
            sqlBuilder.SetWhere(BaseUserLogOnEntity.FieldId, userId);
            int result = sqlBuilder.EndUpdate();

            if (result == 1)
            {
                // 2015-12-09 吉日嘎拉 确认已经记录了修改密码日志
                // BaseLoginLogManager.AddLog(this.UserInfo, Status.ChangePassword.ToDescription());

                // 2015-12-09 吉日嘎拉 增加日志功能、谁什么时候设置了谁的密码?
                var record = new BaseModifyRecordEntity();
                record.TableCode         = BaseUserLogOnEntity.TableName.ToUpper();
                record.TableDescription  = "用户登录信息表";
                record.ColumnCode        = BaseUserLogOnEntity.FieldUserPassword;
                record.ColumnDescription = "用户密码";
                record.RecordKey         = userId;
                record.NewValue          = "修改密码";
                // record.OldValue = "";
                if (this.UserInfo != null)
                {
                    record.IPAddress    = this.UserInfo.IPAddress;
                    record.CreateUserId = this.UserInfo.Id;
                    record.CreateOn     = DateTime.Now;
                }
                BaseModifyRecordManager modifyRecordManager = new Business.BaseModifyRecordManager(this.UserInfo, BaseUserEntity.TableName + "_Log");
                modifyRecordManager.Add(record, true, false);

                /*
                 * // 若是强类型密码检查,那就保存密码修改历史,防止最近2-3次的密码相同的功能实现。
                 * if (BaseSystemInfo.CheckPasswordStrength)
                 * {
                 *  BaseParameterManager parameterManager = new BaseParameterManager(this.DbHelper, this.UserInfo);
                 *  BaseParameterEntity parameterEntity = new BaseParameterEntity();
                 *  parameterEntity.CategoryCode = "User";
                 *  parameterEntity.ParameterId = this.UserInfo.Id;
                 *  parameterEntity.ParameterCode = "Password";
                 *  parameterEntity.ParameterContent = newPassword;
                 *  parameterEntity.DeletionStateCode = 0;
                 *  parameterEntity.Enabled = true;
                 *  parameterEntity.Worked = true;
                 *  parameterManager.AddObject(parameterEntity);
                 * }
                 */

                userInfo = this.LogOnByOpenId(this.UserInfo.OpenId, this.UserInfo.SystemCode).UserInfo;
                // 同步处理其他系统的密码修改动作
                if (BaseSystemInfo.ServerEncryptPassword)
                {
                    // AfterChangePassword(this.UserInfo.Id, salt, oldPassword, newPassword);
                }
                // 修改密码成功,写入状态
                this.StatusCode = Status.ChangePasswordOK.ToString();
            }
            else
            {
                // 数据可能被删除
                this.StatusCode = Status.ErrorDeleted.ToString();
            }

            return(userInfo);
        }