Updates the membership helper in how it updates the membership provider data, updates the editMember page to update the membership provider properties all via the membership provider

This commit is contained in:
Shannon
2014-02-19 23:49:53 +11:00
parent 2e25bc8fdb
commit 40d1a09609
3 changed files with 153 additions and 48 deletions

View File

@@ -73,7 +73,8 @@ namespace Umbraco.Web.Security
if (model.Email.InvariantEquals(membershipUser.Email) == false)
{
//Use the membership provider to change the email since that is configured to do the checks to check for unique emails if that is configured.
membershipUser = UpdateMember(membershipUser, Membership.Provider, model.Email);
var requiresUpdating = UpdateMember(membershipUser, Membership.Provider, model.Email);
membershipUser = requiresUpdating.Result;
}
}
catch (Exception ex)
@@ -554,8 +555,7 @@ namespace Umbraco.Web.Security
return Attempt.Fail(new PasswordChangedModel { ChangeError = new ValidationResult("Could not change password, error: " + ex2.Message + " (see log for full details)", new[] { "value" }) });
}
}
/// <summary>
/// Updates a membership user with all of it's writable properties
/// </summary>
@@ -563,55 +563,56 @@ namespace Umbraco.Web.Security
/// <param name="provider"></param>
/// <param name="email"></param>
/// <param name="isApproved"></param>
/// <param name="isLocked"></param>
/// <param name="lastLoginDate"></param>
/// <param name="lastActivityDate"></param>
/// <param name="comment"></param>
/// <returns></returns>
internal MembershipUser UpdateMember(MembershipUser member, MembershipProvider provider,
/// <returns>
/// Returns successful if the membershipuser required updating, otherwise returns failed if it didn't require updating.
/// </returns>
internal Attempt<MembershipUser> UpdateMember(MembershipUser member, MembershipProvider provider,
string email = null,
bool? isApproved = null,
bool? isLocked = null,
DateTime? lastLoginDate = null,
DateTime? lastActivityDate = null,
string comment = null)
{
var needsUpdating = false;
//set the writable properties
if (email != null)
{
needsUpdating = member.Email != email;
member.Email = email;
}
if (isApproved.HasValue)
{
needsUpdating = member.IsApproved != isApproved.Value;
member.IsApproved = isApproved.Value;
}
if (lastLoginDate.HasValue)
{
needsUpdating = member.LastLoginDate != lastLoginDate.Value;
member.LastLoginDate = lastLoginDate.Value;
}
if (lastActivityDate.HasValue)
{
needsUpdating = member.LastActivityDate != lastActivityDate.Value;
member.LastActivityDate = lastActivityDate.Value;
}
if (comment != null)
{
needsUpdating = member.Comment != comment;
member.Comment = comment;
}
if (isLocked.HasValue)
//Don't persist anything if nothing has changed
if (needsUpdating)
{
//there is no 'setter' on IsLockedOut but you can ctor a new membership user with it set, so i guess that's what we'll do,
// this does mean however if it was a typed membership user object that it will no longer be typed
//membershipUser.IsLockedOut = true;
member = new MembershipUser(member.ProviderName, member.UserName,
member.ProviderUserKey, member.Email, member.PasswordQuestion, member.Comment, member.IsApproved,
isLocked.Value, //new value
member.CreationDate, member.LastLoginDate, member.LastActivityDate, member.LastPasswordChangedDate, member.LastLockoutDate);
provider.UpdateUser(member);
return Attempt<MembershipUser>.Succeed(member);
}
provider.UpdateUser(member);
return member;
return Attempt<MembershipUser>.Fail(member);
}
/// <summary>