From 40ebc1295c47549770ccb9e3c6139e24fdff5cb1 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 1 Apr 2014 15:30:42 +0200 Subject: [PATCH 1/2] Fixes error thrown when saving password and actually using the Umbraco membership provider --- src/Umbraco.Core/Services/MemberService.cs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 33b7721556..128ccea5f7 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -107,18 +107,21 @@ namespace Umbraco.Core.Services { provider.ChangePassword(member.Username, "", password); } + else + { + throw new NotSupportedException("When using a non-Umbraco membership provider you must change the member password by using the MembershipProvider.ChangePassword method"); + } //go re-fetch the member and update the properties that may have changed var result = GetByUsername(member.Username); - if (result != null) - { - //should never be null but it could have been deleted by another thread. - member.RawPasswordValue = result.RawPasswordValue; - member.LastPasswordChangeDate = result.LastPasswordChangeDate; - member.UpdateDate = member.UpdateDate; - } - - throw new NotSupportedException("When using a non-Umbraco membership provider you must change the member password by using the MembershipProvider.ChangePassword method"); + + //should never be null but it could have been deleted by another thread. + if (result == null) + return; + + member.RawPasswordValue = result.RawPasswordValue; + member.LastPasswordChangeDate = result.LastPasswordChangeDate; + member.UpdateDate = member.UpdateDate; } /// From 5b693f93105d3a893b8eefd87fb7e0d391e37029 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Tue, 1 Apr 2014 16:43:11 +0200 Subject: [PATCH 2/2] Adds ability to add/remove a single role to/from a single member, which is much nicer than having to instantiate arrays --- .../Services/IMembershipRoleService.cs | 4 ++++ src/Umbraco.Core/Services/MemberService.cs | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/Umbraco.Core/Services/IMembershipRoleService.cs b/src/Umbraco.Core/Services/IMembershipRoleService.cs index 46860e8c74..d66e9f17ac 100644 --- a/src/Umbraco.Core/Services/IMembershipRoleService.cs +++ b/src/Umbraco.Core/Services/IMembershipRoleService.cs @@ -14,9 +14,13 @@ namespace Umbraco.Core.Services IEnumerable GetMembersInRole(string roleName); IEnumerable FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); bool DeleteRole(string roleName, bool throwIfBeingUsed); + void AssignRole(string username, string roleName); void AssignRoles(string[] usernames, string[] roleNames); + void DissociateRole(string username, string roleName); void DissociateRoles(string[] usernames, string[] roleNames); + void AssignRole(int memberId, string roleName); void AssignRoles(int[] memberIds, string[] roleNames); + void DissociateRole(int memberId, string roleName); void DissociateRoles(int[] memberIds, string[] roleNames); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 128ccea5f7..44d7678f39 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -958,6 +958,10 @@ namespace Umbraco.Core.Services } } } + public void AssignRole(string username, string roleName) + { + AssignRoles(new[] { username }, new[] { roleName }); + } public void AssignRoles(string[] usernames, string[] roleNames) { @@ -968,6 +972,11 @@ namespace Umbraco.Core.Services } } + public void DissociateRole(string username, string roleName) + { + DissociateRoles(new[] { username }, new[] { roleName }); + } + public void DissociateRoles(string[] usernames, string[] roleNames) { var uow = _uowProvider.GetUnitOfWork(); @@ -976,6 +985,11 @@ namespace Umbraco.Core.Services repository.DissociateRoles(usernames, roleNames); } } + + public void AssignRole(int memberId, string roleName) + { + AssignRoles(new[] { memberId }, new[] { roleName }); + } public void AssignRoles(int[] memberIds, string[] roleNames) { @@ -986,6 +1000,11 @@ namespace Umbraco.Core.Services } } + public void DissociateRole(int memberId, string roleName) + { + DissociateRoles(new[] { memberId }, new[] { roleName }); + } + public void DissociateRoles(int[] memberIds, string[] roleNames) { var uow = _uowProvider.GetUnitOfWork();