c# - 如何使用客户端对象模型授予用户对某些文件夹的权限?

标签 c# sharepoint sharepoint-2010 permissions sharepoint-clientobject

到目前为止,我可以使用以下代码授予用户某些权限:

    ClientContext context = new ClientContext("http://myRealURL");
    Principal user = context.Web.EnsureUser(@"myLoginAccout");

    RoleDefinition readDef = context.Web.RoleDefinitions.GetByName("Read");
    RoleDefinitionBindingCollection roleDefCollection = new RoleDefinitionBindingCollection(context);
    roleDefCollection.Add(readDef);
    RoleAssignment newRoleAssignment = context.Web.RoleAssignments.Add(user, roleDefCollection);

    context.ExecuteQuery(); 

上面的代码工作正常,现在我的任务是使用 C# 代码仅将用户权限添加到某些文件夹。例如,在 Libraries 下,我有一个名为 JZhu 的库,在 JZhu 中,我有两个文件夹 folder1folder2。是否可以使用 Client Object Model 更改这两个文件夹的访问权限?

enter image description here

enter image description here

最佳答案

以下示例演示了如何通过 CSOM 自定义对文件夹的访问。有两个步骤:

  1. 为文件夹分配唯一权限,因为默认文件夹 从父对象(List)继承权限
  2. 授予用户对文件夹的权限

例子:

Principal user = ctx.Web.EnsureUser(accountName);
var folder = ctx.Web.GetFolderByServerRelativeUrl(folderUrl);
var roleDefinition = ctx.Site.RootWeb.RoleDefinitions.GetByType(RoleType.Reader);  //get Reader role
var roleBindings = new RoleDefinitionBindingCollection(ctx) { roleDefinition };
folder.ListItemAllFields.BreakRoleInheritance(true, false);  //set folder unique permissions
folder.ListItemAllFields.RoleAssignments.Add(user, roleBindings);
ctx.ExecuteQuery();

,其中 folderUrl 参数对应于文件夹的服务器相对 url,

例如 /news/documents/archive 的结构如下:

News (site)
  |
  Documents (library)
     |
     Archive (folder)

关于c# - 如何使用客户端对象模型授予用户对某些文件夹的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29754692/

相关文章:

c# - 优化 LINQ 查询

sharepoint - 如何使用MOSS中其他站点的列表?

sharepoint-2010 - 如何防止 SharePoint 2010 删除/剥离 JavaScript 和某些 CSS 元素?

c# - DateTime ToLocalTime 失败

c# - 在 C# 中,如何使用反射访问花括号构造函数?

c# - 如何更改配置文件的文件扩展名 (c#)

.net - 为什么无法在 Azure VM 角色中运行 SharePoint 服务器实例?

SharePoint 2010 搜索不起作用

c# - 通过 CSOM 错误创建 SharePoint 查找字段

javascript - 如何使用 SPServices 和 SharePoint 2010 搜索和替换列表项名称?