diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index a2b720d06d..93179f7e91 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -225,11 +225,9 @@ namespace Umbraco.Core.Persistence.Repositories // user's default permissions. if (parentPermissions.Any()) { - //group by the unique permission and assign then for the users of that permission set. - foreach (var assignedPermission in parentPermissions.GroupBy(x => x.Permission)) - { - AssignEntityPermissions(entity, assignedPermission.Key, assignedPermission.Select(x => (object)x.UserId)); - } + var userPermissions = parentPermissions.ToDictionary( + permissionDto => (object) permissionDto.UserId, permissionDto => permissionDto.Permission); + AssignEntityPermissions(entity, userPermissions); } //Create the Content specific data - cmsContent diff --git a/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs index 88087c7999..0bf6a6eeb8 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs @@ -58,6 +58,25 @@ namespace Umbraco.Core.Persistence.Repositories Database.BulkInsertRecords(actions); } + /// + /// Assigns permissions to an entity for multiple users/permission entries + /// + /// + /// + /// A key/value pair list containing a userId and a permission to assign + /// + protected internal void AssignEntityPermissions(TEntity entity, IEnumerable> userPermissions) + { + var actions = userPermissions.Select(p => new User2NodePermissionDto + { + NodeId = entity.Id, + Permission = p.Value, + UserId = (int)p.Key + }); + + Database.BulkInsertRecords(actions); + } + /// /// Replace permissions for an entity for multiple users /// diff --git a/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs b/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs index 3ee82a820e..8494ec7c8c 100644 --- a/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs +++ b/src/Umbraco.Tests/Persistence/Querying/PetaPocoSqlTests.cs @@ -16,20 +16,20 @@ namespace Umbraco.Tests.Persistence.Querying public void Generate_Replace_Entity_Permissions_Test() { // Act - var sql = PermissionRepository.GenerateReplaceEntityPermissionsSql(123, "abcd", new object[] {10, 11, 12}); + var sql = PermissionRepository.GenerateReplaceEntityPermissionsSql(123, "A", new object[] {10, 11, 12}); // Assert - Assert.AreEqual(@"SET [permission]='abcd' WHERE (([nodeId]=123) AND ([userId]=10 OR [userId]=11 OR [userId]=12))", sql); + Assert.AreEqual(@"SET [permission]='A' WHERE (([nodeId]=123) AND ([userId]=10 OR [userId]=11 OR [userId]=12))", sql); } [Test] public void Generate_Replace_Entity_Permissions_With_Descendants_Test() { // Act - var sql = PermissionRepository.GenerateReplaceEntityPermissionsSql(new[] {123, 456}, "abcd", new object[] {10, 11, 12}); + var sql = PermissionRepository.GenerateReplaceEntityPermissionsSql(new[] {123, 456}, "A", new object[] {10, 11, 12}); // Assert - Assert.AreEqual(@"SET [permission]='abcd' WHERE (([nodeId]=123 OR [nodeId]=456) AND ([userId]=10 OR [userId]=11 OR [userId]=12))", sql); + Assert.AreEqual(@"SET [permission]='A' WHERE (([nodeId]=123 OR [nodeId]=456) AND ([userId]=10 OR [userId]=11 OR [userId]=12))", sql); } [Test] diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index 0fb31e831c..973000b9ca 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -59,7 +59,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); // Act - repository.AssignEntityPermissions(parentPage, "ABCD", new object[] {0}); + repository.AssignEntityPermissions(parentPage, "A", new object[] {0}); var childPage = MockedContent.CreateSimpleContent(contentType, "child", parentPage); repository.AddOrUpdate(childPage); unitOfWork.Commit(); @@ -67,7 +67,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Assert var permissions = repository.GetPermissionsForEntity(childPage.Id); Assert.AreEqual(1, permissions.Count()); - Assert.AreEqual("ABCD", permissions.Single().Permission); + Assert.AreEqual("A", permissions.Single().Permission); } [Test]