From 3640ed259d28a1882e3dec7407016d25d32e8772 Mon Sep 17 00:00:00 2001 From: Arkadiusz Biel Date: Tue, 24 Mar 2020 14:15:52 +0000 Subject: [PATCH] GetAllIds for Roles (#7806) --- .../Services/IMembershipRoleService.cs | 3 ++ .../Services/Implement/MemberService.cs | 37 +++++++++++++++++-- .../Services/MemberServiceTests.cs | 27 ++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/Services/IMembershipRoleService.cs b/src/Umbraco.Core/Services/IMembershipRoleService.cs index 30531b5031..7389bb9799 100644 --- a/src/Umbraco.Core/Services/IMembershipRoleService.cs +++ b/src/Umbraco.Core/Services/IMembershipRoleService.cs @@ -11,6 +11,9 @@ namespace Umbraco.Core.Services IEnumerable GetAllRoles(); IEnumerable GetAllRoles(int memberId); IEnumerable GetAllRoles(string username); + IEnumerable GetAllRolesIds(); + IEnumerable GetAllRolesIds(int memberId); + IEnumerable GetAllRolesIds(string username); IEnumerable GetMembersInRole(string roleName); IEnumerable FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); bool DeleteRole(string roleName, bool throwIfBeingUsed); diff --git a/src/Umbraco.Core/Services/Implement/MemberService.cs b/src/Umbraco.Core/Services/Implement/MemberService.cs index a64e30495b..9b97c6b161 100644 --- a/src/Umbraco.Core/Services/Implement/MemberService.cs +++ b/src/Umbraco.Core/Services/Implement/MemberService.cs @@ -331,7 +331,7 @@ namespace Umbraco.Core.Services.Implement saveEventArgs.CanCancel = false; scope.Events.Dispatch(Saved, this, saveEventArgs); } - + if (withIdentity == false) return; @@ -816,8 +816,8 @@ namespace Umbraco.Core.Services.Implement { //trimming username and email to make sure we have no trailing space member.Username = member.Username.Trim(); - member.Email = member.Email.Trim(); - + member.Email = member.Email.Trim(); + using (var scope = ScopeProvider.CreateScope()) { var saveEventArgs = new SaveEventArgs(member); @@ -971,6 +971,35 @@ namespace Umbraco.Core.Services.Implement } } + public IEnumerable GetAllRolesIds() + { + using (var scope = ScopeProvider.CreateScope(autoComplete: true)) + { + scope.ReadLock(Constants.Locks.MemberTree); + return _memberGroupRepository.GetMany().Select(x => x.Id).Distinct(); + } + } + + public IEnumerable GetAllRolesIds(int memberId) + { + using (var scope = ScopeProvider.CreateScope(autoComplete: true)) + { + scope.ReadLock(Constants.Locks.MemberTree); + var result = _memberGroupRepository.GetMemberGroupsForMember(memberId); + return result.Select(x => x.Id).Distinct(); + } + } + + public IEnumerable GetAllRolesIds(string username) + { + using (var scope = ScopeProvider.CreateScope(autoComplete: true)) + { + scope.ReadLock(Constants.Locks.MemberTree); + var result = _memberGroupRepository.GetMemberGroupsForMember(username); + return result.Select(x => x.Id).Distinct(); + } + } + public IEnumerable GetMembersInRole(string roleName) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) @@ -1241,7 +1270,7 @@ namespace Umbraco.Core.Services.Implement /// Exports a member. /// /// - /// This is internal for now and is used to export a member in the member editor, + /// This is internal for now and is used to export a member in the member editor, /// it will raise an event so that auditing logs can be created. /// internal MemberExportModel ExportMember(Guid key) diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs index 57d6b67af8..1385bbe0b3 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -197,7 +197,17 @@ namespace Umbraco.Tests.Services Assert.AreEqual(3, found.Count()); } + [Test] + public void Can_Get_All_Roles_IDs() + { + ServiceContext.MemberService.AddRole("MyTestRole1"); + ServiceContext.MemberService.AddRole("MyTestRole2"); + ServiceContext.MemberService.AddRole("MyTestRole3"); + var found = ServiceContext.MemberService.GetAllRolesIds(); + + Assert.AreEqual(3, found.Count()); + } [Test] public void Can_Get_All_Roles_By_Member_Id() { @@ -216,7 +226,24 @@ namespace Umbraco.Tests.Services Assert.AreEqual(2, memberRoles.Count()); } + [Test] + public void Can_Get_All_Roles_Ids_By_Member_Id() + { + IMemberType memberType = MockedContentTypes.CreateSimpleMemberType(); + ServiceContext.MemberTypeService.Save(memberType); + IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test"); + ServiceContext.MemberService.Save(member); + ServiceContext.MemberService.AddRole("MyTestRole1"); + ServiceContext.MemberService.AddRole("MyTestRole2"); + ServiceContext.MemberService.AddRole("MyTestRole3"); + ServiceContext.MemberService.AssignRoles(new[] { member.Id }, new[] { "MyTestRole1", "MyTestRole2" }); + + var memberRoles = ServiceContext.MemberService.GetAllRolesIds(member.Id); + + Assert.AreEqual(2, memberRoles.Count()); + + } [Test] public void Can_Get_All_Roles_By_Member_Username() {