/// <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); }
/// <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); }
/// <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); }
/// <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); }