diff --git a/src/Umbraco.Core/Security/MembershipProviderBase.cs b/src/Umbraco.Core/Security/MembershipProviderBase.cs index 6ebc6e3d08..d8bbc1dced 100644 --- a/src/Umbraco.Core/Security/MembershipProviderBase.cs +++ b/src/Umbraco.Core/Security/MembershipProviderBase.cs @@ -9,6 +9,7 @@ using System.Web.Configuration; using System.Web.Hosting; using System.Web.Security; using Umbraco.Core.Logging; +using Umbraco.Core.Models; namespace Umbraco.Core.Security { @@ -520,7 +521,9 @@ namespace Umbraco.Core.Security public override string ResetPassword(string username, string answer) { - if (EnablePasswordReset == false) + var auth = new HttpContextWrapper(HttpContext.Current).GetUmbracoAuthTicket(); + var userIsAdmin = ApplicationContext.Current.Services.UserService.GetByUsername(auth.Name).IsAdmin(); + if (userIsAdmin == false && EnablePasswordReset == false) { throw new NotSupportedException("Password reset is not supported"); } diff --git a/src/Umbraco.Web.UI/umbraco/controls/PasswordChanger.ascx.cs b/src/Umbraco.Web.UI/umbraco/controls/PasswordChanger.ascx.cs index fbf30a776d..f5f2834fba 100644 --- a/src/Umbraco.Web.UI/umbraco/controls/PasswordChanger.ascx.cs +++ b/src/Umbraco.Web.UI/umbraco/controls/PasswordChanger.ascx.cs @@ -4,6 +4,9 @@ using System.Configuration.Provider; using System.Linq; using System.Web; using System.Web.Security; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Core.Security; namespace Umbraco.Web.UI.Umbraco.Controls { @@ -20,9 +23,11 @@ namespace Umbraco.Web.UI.Umbraco.Controls umbPasswordChanger_passwordNewConfirm.Text = null; //reset the flag always IsChangingPasswordField.Value = "false"; - this.DataBind(); - } - + var auth = new HttpContextWrapper(HttpContext.Current).GetUmbracoAuthTicket(); + ResetPlaceHolder.Visible = ApplicationContext.Current.Services.UserService.GetByUsername(auth.Name).IsAdmin(); + + this.DataBind(); + } } } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/controls/passwordChanger.ascx b/src/Umbraco.Web.UI/umbraco/controls/passwordChanger.ascx index 7059fd0803..2990c55d55 100644 --- a/src/Umbraco.Web.UI/umbraco/controls/passwordChanger.ascx +++ b/src/Umbraco.Web.UI/umbraco/controls/passwordChanger.ascx @@ -67,7 +67,7 @@ - +
diff --git a/src/Umbraco.Web/MembershipProviderExtensions.cs b/src/Umbraco.Web/MembershipProviderExtensions.cs index b0fc939480..49d8abca7f 100644 --- a/src/Umbraco.Web/MembershipProviderExtensions.cs +++ b/src/Umbraco.Web/MembershipProviderExtensions.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; using System.Web.Security; +using Umbraco.Core.Models; using Umbraco.Core.Security; namespace Umbraco.Web @@ -23,7 +20,7 @@ namespace Umbraco.Web return new Dictionary { {"minPasswordLength", membershipProvider.MinRequiredPasswordLength}, - {"enableReset", membershipProvider.EnablePasswordReset}, + {"enableReset", UmbracoContext.Current.Security.CurrentUser.IsAdmin()}, {"enablePasswordRetrieval", membershipProvider.EnablePasswordRetrieval}, {"requiresQuestionAnswer", membershipProvider.RequiresQuestionAndAnswer}, {"allowManuallyChangingPassword", baseProvider != null && baseProvider.AllowManuallyChangingPassword} diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index 158910a794..c82d8411ad 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -663,7 +663,8 @@ namespace Umbraco.Web.Security //Are we resetting the password?? if (passwordModel.Reset.HasValue && passwordModel.Reset.Value) { - if (membershipProvider.EnablePasswordReset == false) + var userIsAdmin = UmbracoContext.Current.Security.CurrentUser.IsAdmin(); + if (userIsAdmin == false && membershipProvider.EnablePasswordReset == false) { return Attempt.Fail(new PasswordChangedModel { ChangeError = new ValidationResult("Password reset is not enabled", new[] { "resetPassword" }) }); }