Updates ContentRepository to bulk insert all parent permissions at once (overload to the AssignEntityPermissions method)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user