Поделиться через


Изменение разрешений сайта 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();

См. также