2016-01-28 1 views
0

У меня есть два подсайта на моем сайте sharepoint, SampleSite1 и SampleSite2 под Parentsite, называемый MainSite.Как добавить пользователей в группы под сайтом сайта в sharepoint sitecollection?

http://xyz.sharepoint.com/sites/MainSite/ - SiteUrl 

    http://xyz.sharepoint.com/sites/MainSite/SampleSite1 - Subsite1's Url 
    http://xyz.sharepoint.com/sites/MainSite/SampleSite2 - Subsite2's Url 

Каждый из Сайтов имеет две группы superUser и NormalUser соответственно.

Учетные данные используют SiteUrl MainSite.

SecureString password = new SecureString(); 
string pwd = "Pass123"; 
string UserName = "[email protected]"; 
password = convertToSecureString(pwd); 
ClientContext clientContext = new ClientContext("http://xyz.sharepoint.com/sites/MainSite/"); 
clientContext.Credentials = new SharePointOnlineCredentials(UserName, password); 

Incase добавления пользователя к группам Subsite как NormalUser, можем ли мы использовать тот же контекст Sharepoint с выше SiteURL для доступа и выполнения операций (добавление/удаление пользователя) в группах, присутствующих под подсайтами?

Если да, то как мы можем это сделать? У меня уже есть встроенный код для добавления или удаления пользователя из группы сайтов sharepoint на основе некоторых требований.

public void AddUserToDMSite(string useremail, string securityGroupName) 
     { 
    GroupCollection collGroup = SPContext.Web.SiteGroups; 
    Group oGroup1 = collGroup.GetByName("UserList"); 
    Group oGroup2 = collGroup.GetByName(securityGroupName); 
    UserCollection oUserCollection1 = oGroup1.Users; 
    UserCollection oUserCollection2 = oGroup2.Users; 
    SPContext.Load(oUserCollection1); 
    SPContext.Load(oUserCollection2); 
    SPContext.ExecuteQuery(); 
    var uname = oGroup1.Users.GetByEmail(useremail); 
    var userCheck = oUserCollection2.Where(u => u.Email == useremail).FirstOrDefault(); 
    if (userCheck == null) 
    { 
      Microsoft.SharePoint.Client.User oUser2 = oGroup2.Users.AddUser(uname); 
    } 
    SPContext.ExecuteQuery(); 
    } 

ответ

1

Для подсайтами вы можете поступить следующим образом:

Web oWebsite = clientContext.Web; 
clientContext.Load(oWebsite, website => website.Webs); 
clientContext.ExecuteQuery(); 
foreach (Web orWebsite in oWebsite.Webs) 
{ 
    AddUserToDMSite(useremail, securityGroupName, orWebSite) 
} 

и изменить AddUserToDMSite работать либо с сайтов и дочерних сайтов, как:

public void AddUserToDMSite(string useremail, string securityGroupName, Web aWeb) 
    { 
GroupCollection collGroup = aWeb.SiteGroups; 
Group oGroup1 = collGroup.GetByName("UserList"); 
Group oGroup2 = collGroup.GetByName(securityGroupName); 
UserCollection oUserCollection1 = oGroup1.Users; 
UserCollection oUserCollection2 = oGroup2.Users; 
SPContext.Load(oUserCollection1); 
SPContext.Load(oUserCollection2); 
SPContext.ExecuteQuery(); 
var uname = oGroup1.Users.GetByEmail(useremail); 
var userCheck = oUserCollection2.Where(u => u.Email == useremail).FirstOrDefault(); 
if (userCheck == null) 
{ 
     Microsoft.SharePoint.Client.User oUser2 = oGroup2.Users.AddUser(uname); 
} 
SPContext.ExecuteQuery(); 
} 
+0

Спасибо за ваш ответ Марко. Я получаю сообщение об ошибке, когда вы передаете параметры методу. \t Ссылка на объект требуется для нестатического поля, метода или свойства 'SharepointTestApp.Program.AddUserToDMSite (строка, строка, Microsoft.SharePoint.Client.Web)' –

+0

is возможно ли отправлять объекты в качестве параметра? –

+0

Привет, Конечно, можно передать объекты в качестве параметра. Попробуйте установить метод AddUserToDMSite как статический и дайте мне знать результат. public static void AddUserToDMSite (... –

Смежные вопросы