我有以下代码在创建文件夹时工作正常:
public void CreateFolders()
{
_SharePoint.ClientContext _ClientContext = new _SharePoint.ClientContext("https://sharepoint.oshiro.com/sites/oshirodev/");
_ClientContext.Credentials = new NetworkCredential("user", "pass", "oshiro.com");
var _web = _ClientContext._web;
var _Root = _web.Lists.GetByTitle("Library1");
var _folder1 = _Root.RootFolder.Folders.Add("Folder1");
var _subfolder1 = _folder1.Folders.Add("SubFolder1");
_folder1.Update();
_subfolder1.Update();
var _folder2 = _Root.RootFolder.Folders.Add("Folder2");
var _subfolder2 = _folder2.Folders.Add("SubFolder2");
_folder1.Update();
_subfolder1.Update();
_ClientContext.ExecuteQuery();
}
我理解如何更改库中所有内容的权限,例如:
public void ChangeFldPerms()
{
_SharePoint.ClientContext _ClientContext = new _SharePoint.ClientContext("https://sharepoint.oshiro.com/sites/oshirodev/");
_ClientContext.Credentials = new NetworkCredential("user", "pass", "oshiro.com");
_SharePoint.Principal _user = _ClientContext.Web.EnsureUser(@"oshiro\tom");
_SharePoint.List _item = _ClientContext.Web.Lists.GetByTitle("Library1");
var roleDefinition = _ClientContext.Site.RootWeb.RoleDefinitions.GetByType(_SharePoint.RoleType.Reader); //get Reader role
var roleBindings = new _SharePoint.RoleDefinitionBindingCollection(_ClientContext) { roleDefinition };
_item.BreakRoleInheritance(true, false);
_item.RoleAssignments.Add(_user, roleBindings);
_ClientContext.ExecuteQuery();
}
但我不想更改所有内容的权限,我只想为我正在创建的新文件夹设置权限。
所以我尝试了这个:
public void ChangeFldPerms2()
{
SharePoint.ClientContext _ClientContext = new _SharePoint.ClientContext("https://sharepoint.oshiro.com/sites/oshirodev/");
_ClientContext.Credentials = new NetworkCredential("user", "pass", "oshiro.com");
_SharePoint.Principal _user = _ClientContext.Web.EnsureUser(@"oshiro\tom");
_SharePoint.Folder _folder = _ClientContext.Web.GetFolderByServerRelativeUrl("/sites/oshirodev/Library1/Folder1");
var roleDefinition = _ClientContext.Site.RootWeb.RoleDefinitions.GetByType(_SharePoint.RoleType.Reader);
var roleBindings = new _SharePoint.RoleDefinitionBindingCollection(_ClientContext) { roleDefinition };
_folder.ListItemAllFields.BreakRoleInheritance(true, false);
_folder.ListItemAllFields.RoleAssignments.Add(user, roleBindings);
_ClientContext.ExecuteQuery();
}
但此代码在SharePoint 2010中不起作用,因为在Sharepoint 2013之前未将ListItemAllFields
引入SharePoint。
我的问题是,如何为这些文件夹设置权限,以便只有特定用户才能访问这些文件夹?理想情况下,如果可以在创建文件夹时设置,那就太棒了。如果无法做到这一点,那么在创建文件夹后设置权限就没问题了。
该应用程序是一个WinForm。
答案 0 :(得分:1)
正如您所说的那样ListItemAllFields
允许您向特定用户授予权限仅在SharePoint 2013中引入,您无法利用它。
但是,如果您结帐this answer,您可以通过安装this plugin并创建自己的ListExtensions
课程来了解它的方法,因为它仍然无法公开。
static class ListExtensions { /// <summary> /// Load List Item by Url /// </summary> /// <param name="list"></param> /// <param name="url"></param> /// <returns></returns> public static ListItem LoadItemByUrl(this List list, string url) { var context = list.Context; var query = new CamlQuery { ViewXml = String.Format("<View><RowLimit>1</RowLimit><Query><Where><Eq><FieldRef Name='FileRef'/><Value> Type='Url'>{0}</Value></Eq></Where></Query></View>", url), }; var items = list.GetItems(query); context.Load(items); context.ExecuteQuery(); return items.Count > 0 ? items[0] : null; } }
CamlQuery
是其中最重要的部分,并允许您使用类似
public void ChangeFldPerms2()
{
SharePoint.ClientContext _ClientContext = new _SharePoint.ClientContext("https://sharepoint.oshiro.com/sites/oshirodev/");
_ClientContext.Credentials = new NetworkCredential("user", "pass", "oshiro.com");
_SharePoint.Principal _user = _ClientContext.Web.EnsureUser(@"oshiro\tom");
var list = _ClientContext.Web.Lists.GetByTitle("Library1");
var folderItem = list.LoadItemByUrl("/sites/oshirodev/Library1/Folder1");
var roleDefinition = _ClientContext.Site.RootWeb.RoleDefinitions.GetByType(_SharePoint.RoleType.Reader);
var roleBindings = new _SharePoint.RoleDefinitionBindingCollection(_ClientContext) { roleDefinition };
folderItem.BreakRoleInheritance(true, false);
folderItem.RoleAssignments.Add(user, roleBindings);
_ClientContext.ExecuteQuery();
}
答案 1 :(得分:0)
另一种方式。如果您可以访问应用服务器,则可以在iis应用程序池上创建权限。