当我在列表中删除用户/组时,为什么会影响具有唯一权限的项目



我是SharePoint和CSOM的新手。我正在尝试弄清楚如何在列表中更改列表中的现有组/用户权限,而不会无意中更改所述列表中的项目许可。这是代码:

myList.BreakRoleInheritance(true, true);
var roletypes = ctx.Web.RoleDefinitions.GetByType(RoleType.Reader);
ctx.ExecuteQuery();
RoleDefinitionBindingCollection colRoleDefinitionBinding = new RoleDefinitionBindingCollection(ctx);
colRoleDefinitionBinding.Add(roletypes);
// if user, add him with read access
if (!item.ContainsKey("group"))
{
     Principal entity = ctx.Web.EnsureUser(item["user"]);
     myList.RoleAssignments.GetByPrincipal(entity).DeleteObject();
     myList.RoleAssignments.Add(entity, colRoleDefinitionBinding);
}
else
{
     Group entity = ctx.Web.SiteGroups.GetById(Int32.Parse(item["group"]));
     myList.RoleAssignments.GetByPrincipal(entity).DeleteObject();
     myList.RoleAssignments.Add(entity, colRoleDefinitionBinding);
}
ctx.ExecuteQuery();

我本质上只是删除用户或组,然后再次使用新的权限添加它们。删除用户/组时,如果该用户或组存在在项目许可中,则也将其删除。我不明白的是,当物品具有独特的权限时,该项目的权限被篡改了?是否有另一种方法可以更改列表权限而不影响项目许可?

弄清楚了。只需使用ImportRoleDefinitionBindings来更改权限:

Principal entity = ctx.Web.EnsureUser(item["user"]);
roleAssignment = myList.RoleAssignments.GetByPrincipal(entity);
roleAssignment.ImportRoleDefinitionBindings(colRoleDefinitionBinding);
roleAssignment.Update();
ctx.ExecuteQuery();

最新更新