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

时间:2017-09-29 03:29:36

标签: c# sharepoint permissions sharepoint-2010 csom

我是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();

我实际上只是删除了用户或组,并使用新的权限再次添加它们。删除用户/组时,如果该用户或组存在于项目权限中,则该用户或组也将被删除。我不明白为什么项目权限在拥有唯一权限时被篡改?是否有其他方法可以在不影响项目权限的情况下更改列表权限?

1 个答案:

答案 0 :(得分:1)

想出来。只需使用ImportRoleDefinitionBindings更改权限:

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