Изменение разрешений сайта SharePoint и получение состояния внешнего общего доступа
С помощью примера Core.SitePermissions можно изменить администраторов семейства веб-сайтов в любом семействе веб-сайтов, в том числе для OneDrive для бизнеса в клиентах Office 365. В этом примере также показано, как получить состояние внешнего общего доступа для Office 365 многотенантных установок.
С помощью консольного приложения вы создаете объект ClientContext , чтобы получить разрешения на перечисление и (или) изменение администраторов, а также получить состояние внешнего общего доступа. Вы также создаете зарегистрированную надстройку с помощью маркеров OAuth.
Подготовка к работе
Чтобы приступить к работе, скачайте пример надстройки Core.SitePermissions из проекта Office 365 шаблоны и методики разработчика на сайте GitHub.
Примечание.
Код, приведенный в этой статье, предоставляется "как есть" без какой-либо явной или подразумеваемой гарантии, включая подразумеваемые гарантии пригодности для какой-либо цели, для продажи или гарантии отсутствия нарушения прав иных правообладателей.
Работа с администраторами семейства веб-сайтов
Чтобы обновить администраторов семейства веб-сайтов, необходимо быть администратором семейства веб-сайтов. Первым шагом является создание объекта ClientContext пользователем с нужными разрешениями.
ClientContext cc = new AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(String.Format("https://{0}.sharepoint.com/sites/{1}", tenantName, siteName), String.Format("{0}@{1}.onmicrosoft.com", userName, tenantName), password);
С помощью объекта ClientContext можно получить список текущих администраторов семейства веб-сайтов или обновить администраторов семейства веб-сайтов, как показано в следующем примере.
List<UserEntity> admins = cc.Web.GetAdministrators();
List<UserEntity> adminsToAdd = new List<UserEntity>();
adminsToAdd.Add(new UserEntity() { LoginName = "i:0#.f|membership|user@domain" });
cc.Web.AddAdministrators(adminsToAdd);
UserEntity adminToRemove = new UserEntity() { LoginName = "i:0#.f|membership|user@domain" };
cc.Web.RemoveAdministrator(adminToRemove);
Вы можете настроить администраторов семейства веб-сайтов для семейств веб-сайтов, где вы еще не являетесь администратором семейства веб-сайтов, создав объект ClientContext с помощью зарегистрированной надстройки. Здесь объект ClientContext основан на маркере OAuth с разрешениями на уровне клиента.
// Use (Get-MsolCompanyInformation).ObjectID to obtain Target/Tenant realm: <guid>
//
// Manually register an add-in via the appregnew.aspx page and generate an add-in ID and
// add-in secret. The add-in title and add-in domain can be a simple string like "MyAddin".
//
// Update the add-in ID in your worker role settings.
//
// Add the add-in secret in your worker role settings.
//
// Manually set the permission XML for your add-in via the appinv.aspx page:
// 1. Look up your add-in via its add-in ID.
// 2. Paste the permission XML and choose create.
//
// Sample permission XML:
// <AppPermissionRequests AllowAppOnlyPolicy="true">
// <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
// </AppPermissionRequests>
//
// Because you're granting tenant-wide full control to an add-in, the add-in secret is as important
// as the password from your SharePoint administration account.
После этого можно использовать следующий код, чтобы получить объект ClientContext для этой надстройки.
ClientContext cc = new AuthenticationManager().GetAppOnlyAuthenticatedContext("https://tenantname-my.sharepoint.com/personal/user2", "<your tenant realm>", "<appID>", "<appsecret>");
Работа с внешним общим доступом (только Office 365 MT)
В этом сценарии показано, как получить состояние внешнего общего доступа для семейства веб-сайтов и получить список внешних пользователей для определенного семейства веб-сайтов или для всего клиента. Так как для этого требуются библиотеки CSOM клиента, необходимо создать ClientContext для семейства веб-сайтов администрирования клиента. Учетная запись пользователя должна быть учетной записью администратора клиента.
ClientContext ccTenant = new AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(String.Format("https://{0}-admin.sharepoint.com/", tenantName), String.Format("{0}@{1}.onmicrosoft.com", userName, tenantName), password);
После того как ClientContext будет готов, можно использовать следующий код, чтобы получить состояние внешнего общего доступа и список внешних пользователей.
ccTenant.Web.GetSharingCapabilitiesTenant(new Uri(String.Format("https://{0}.sharepoint.com/sites/{1}", tenantName, siteName)))
List<ExternalUserEntity> externalUsers = ccTenant.Web.GetExternalUsersForSiteTenant(new Uri(String.Format("https://{0}.sharepoint.com/sites/{1}", tenantName, siteName)));
List<ExternalUserEntity> externalUsers = ccTenant.Web.GetExternalUsersTenant();