2017-05-16 3 views
2

Ich habe den folgenden Code, der gut arbeitet, wenn das Anlegen von Ordnern:Set Ordnerberechtigungen

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(); 
} 

Ich verstehe, wie die Berechtigungen für alles, was zum Beispiel in einer Bibliothek ändern:

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(); 
} 

Aber ich don Ich möchte die Berechtigungen für alles nicht ändern. Ich möchte nur die Berechtigungen für die neuen Ordner festlegen, die ich erstelle.

So habe ich versucht, dies:

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(); 
} 

Aber dieser Code funktioniert nicht in Sharepoint 2010, weil ListItemAllFields nicht bis Sharepoint 2013

Meine Frage an Sharepoint eingeführt wird, wie richte ich die Berechtigungen für diese Ordner, so dass nur ein bestimmter Benutzer darauf zugreifen kann? Im Idealfall, wenn dies beim Erstellen der Ordner festgelegt werden kann, wäre das großartig. Wenn das nicht möglich ist, sind die Einstellungen nach dem Erstellen der Ordner in Ordnung.

Die Anwendung ist ein WinForm.

+0

Um klar zu sein, haben Sie erwartet, dass dieser Code die Berechtigungen nur für einen Ordner ändert? Es hat eine auskommentierte Zeile, die einen Verweis auf einen Ordner erhält, aber nichts damit macht; Der Rest des Codes ändert explizit die Berechtigung für die Bibliothek und nicht für den Ordner. – Thriggle

+0

Sind Ordner 1, Ordner2 und Ordner3 in Bibliothek1? Dies wird die Berechtigung der gesamten Dokumentbibliothek ändern, nicht von Ordner 1. –

+0

Diese Frage wurde bereits gestellt und gelöst [hier.] (Http://stackoverflow.com/a/29807876/6061907) ------- ---------------------------------------------- –

Antwort

1

Wie Sie seit ListItemAllFields gesagt haben, dass Sie Berechtigungen für einen bestimmten Benutzer nur in SharePoint 2013 eingeführt haben, können Sie es nicht nutzen.

Wenn Sie jedoch this answer auschecken, können Sie sehen, dass es einen Weg gibt, indem Sie this plugin installieren und Ihre eigene ListExtensions Klasse erstellen, da sie immer noch nicht verfügbar wäre.

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; 
    } 
} 

Wo die CamlQuery der kritischste Teil davon ist, und Ihnen erlauben würde, um die Berechtigungen zu aktualisieren, indem Sie so etwas wie

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(); 
} 
0

Ein anderer Weg verwendet wird. Wenn Sie auf den Anwendungsserver zugreifen können, können Sie Berechtigungen für die Anwendungspools erstellen.

Verwandte Themen