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

时间:2015-04-20 17:39:12

标签: c# sharepoint sharepoint-2010 permissions client-object-model

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

    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

1 个答案:

答案 0 :(得分:4)

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

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

    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)