コード例 #1
0
        /// <summary>
        /// 更新密码
        /// </summary>
        /// <param name="oldPassword">原密码</param>
        /// <param name="newPassword">新密码</param>
        /// <param name="statusCode">返回状态码</param>
        /// <returns>影响行数</returns>
        public virtual int ChangePassword(string oldPassword, string newPassword, out string statusCode)
        {
            int returnValue = 0;

            // 密码强度检查
            if (SystemInfo.EnableCheckPasswordStrength)
            {
                if (String.IsNullOrEmpty(newPassword))
                {
                    statusCode = StatusCode.PasswordCanNotBeNull.ToString();
                    return(returnValue);
                }

                //最小长度、字母数字组合等强度检查
                if (!ValidateUtil.EnableCheckPasswordStrength(newPassword))
                {
                    statusCode = StatusCode.PasswordNotStrength.ToString();
                    return(returnValue);
                }
            }

            // 加密密码
            if (SystemInfo.EnableEncryptServerPassword)
            {
                oldPassword = this.EncryptUserPassword(oldPassword);
                newPassword = this.EncryptUserPassword(newPassword);
            }

            // 判断输入原始密码是否正确
            PiUserLogOnEntity entity = new PiUserLogOnManager(this.DBProvider, this.UserInfo).GetEntity(UserInfo.Id);

            if (entity.UserPassword == null)
            {
                entity.UserPassword = string.Empty;
            }

            // 密码错误
            if (!entity.UserPassword.Equals(oldPassword))
            {
                statusCode = StatusCode.OldPasswordError.ToString();
                return(returnValue);
            }

            // 更改密码,同时修改密码的修改日期,这里需要兼容多数据库
            var sqlBuilder = new SQLBuilder(this.DBProvider);

            sqlBuilder.BeginUpdate(PiUserLogOnTable.TableName);
            sqlBuilder.SetValue(PiUserLogOnTable.FieldUserPassword, newPassword);
            sqlBuilder.SetDBNow(PiUserLogOnTable.FieldChangePasswordDate);
            sqlBuilder.SetWhere(PiUserLogOnTable.FieldId, UserInfo.Id);
            returnValue = sqlBuilder.EndUpdate();
            statusCode  = returnValue == 1 ? StatusCode.ChangePasswordOK.ToString() : StatusCode.ErrorDeleted.ToString();
            return(returnValue);
        }