如何使用客户端对象模型授予用户对某些文件夹的权限?
How to grant user permission to certain folders using 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# 代码仅将用户权限添加到某些文件夹。例如,在库下,我有一个名为 JZhu
的库,在 JZhu
中,我有两个文件夹 folder1
和 folder2
。是否可以使用Client Object Model
更改这两个文件夹的访问权限?
以下示例演示如何通过 CSOM 自定义对文件夹的访问。有两个步骤:
- 为文件夹分配唯一权限,因为默认文件夹
从父对象 (List) 继承权限
- 授予用户对文件夹的权限
示例:
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)
到目前为止,我可以使用以下代码授予用户某些权限:
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# 代码仅将用户权限添加到某些文件夹。例如,在库下,我有一个名为 JZhu
的库,在 JZhu
中,我有两个文件夹 folder1
和 folder2
。是否可以使用Client Object Model
更改这两个文件夹的访问权限?
以下示例演示如何通过 CSOM 自定义对文件夹的访问。有两个步骤:
- 为文件夹分配唯一权限,因为默认文件夹 从父对象 (List) 继承权限
- 授予用户对文件夹的权限
示例:
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)