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

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

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更改这两个文件夹的访问权限?

在此处输入图像描述

在此处输入图像描述

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

  1. 为文件夹分配唯一权限,因为默认文件夹从父对象inheritance权限(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)