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]