Updates ContentRepository to bulk insert all parent permissions at once (overload to the AssignEntityPermissions method)

This commit is contained in:
Shannon
2013-07-09 10:08:31 +10:00
parent 90b94f6ffb
commit b91d0bb117
4 changed files with 28 additions and 11 deletions

View File

@@ -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

View File

@@ -58,6 +58,25 @@ namespace Umbraco.Core.Persistence.Repositories
Database.BulkInsertRecords(actions);
}
/// <summary>
/// Assigns permissions to an entity for multiple users/permission entries
/// </summary>
/// <param name="entity"></param>
/// <param name="userPermissions">
/// A key/value pair list containing a userId and a permission to assign
/// </param>
protected internal void AssignEntityPermissions(TEntity entity, IEnumerable<KeyValuePair<object, string>> userPermissions)
{
var actions = userPermissions.Select(p => new User2NodePermissionDto
{
NodeId = entity.Id,
Permission = p.Value,
UserId = (int)p.Key
});
Database.BulkInsertRecords(actions);
}
/// <summary>
/// Replace permissions for an entity for multiple users
/// </summary>

View File

@@ -16,20 +16,20 @@ namespace Umbraco.Tests.Persistence.Querying
public void Generate_Replace_Entity_Permissions_Test()
{
// Act
var sql = PermissionRepository<int, IContent>.GenerateReplaceEntityPermissionsSql(123, "abcd", new object[] {10, 11, 12});
var sql = PermissionRepository<int, IContent>.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<int, IContent>.GenerateReplaceEntityPermissionsSql(new[] {123, 456}, "abcd", new object[] {10, 11, 12});
var sql = PermissionRepository<int, IContent>.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]

View File

@@ -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]