到目前为止,我可以使用以下代码向用户授予某些权限:
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
内,我有两个文件夹folder1
和folder2
。是否可以使用Client Object Model
更改这两个文件夹的访问权限?
答案 0 :(得分:4)
以下示例演示如何通过CSOM自定义对文件夹的访问。有两个步骤:
示例:
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)