Modifier SharePoint autorisations de site externe et obtenir le statut de partage externe

Vous pouvez utiliser l’exemple Core.SitePermissions pour modifier les administrateurs de collection de sites sur n’importe quelle collection de sites, y compris ceux pour OneDrive Entreprise sur Office 365 client. Cet exemple vous montre également comment obtenir le statut de partage externe pour Office 365 installations multi-locataires.

À l’aide d’une application console, vous créez un objet ClientContext pour obtenir des autorisations pour lister et/ou modifier les administrateurs, et obtenir l’état de partage externe. Vous créez également un add-in enregistré à l’aide de jetons OAuth.

Avant de commencer

Pour commencer, téléchargez l’exemple de add-in Core.SitePermissions à partir du projet Pratiques et modèles de développement Office 365 sur GitHub.

Notes

Le code dans cet article est fourni tel quel, sans garantie d’aucune sorte, expresse ou implicite, y compris mais sans s’y limiter, aucune garantie implicite d’adéquation à un usage particulier, à une qualité marchande ou une absence de contrefaçon.

Travailler avec les administrateurs de collections de sites

Pour mettre à jour les administrateurs d’une collection de sites, vous devez être administrateur de la collection de sites. La première étape consiste à créer un objet ClientContext par un utilisateur autorisé.

ClientContext cc = new AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(String.Format("https://{0}.sharepoint.com/sites/{1}", tenantName, siteName), String.Format("{0}@{1}.onmicrosoft.com", userName, tenantName), password); 

À l’aide de l’objet ClientContext, vous pouvez obtenir la liste des administrateurs de collection de sites actuels ou mettre à jour les administrateurs de collection de sites, comme illustré dans l’exemple suivant.

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

Vous pouvez définir les administrateurs de collections de sites pour les collections de sites où vous n’êtes pas déjà administrateur de collection de sites en créant un objet ClientContext à l’aide d’un add-in enregistré. Ici, l’objet ClientContext est basé sur un jeton OAuth avec des autorisations au niveau du client.

// 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.

Une fois cette procédure effectuée, vous pouvez utiliser le code suivant pour obtenir un objet ClientContext pour ce module.

ClientContext cc = new AuthenticationManager().GetAppOnlyAuthenticatedContext("https://tenantname-my.sharepoint.com/personal/user2", "<your tenant realm>", "<appID>", "<appsecret>");

Travailler avec le partage externe (Office 365 MT uniquement)

Ce scénario montre comment obtenir l’état de partage externe d’une collection de sites et obtenir une liste d’utilisateurs externes pour une collection de sites spécifique ou pour l’ensemble du client. Étant donné que cela nécessite les bibliothèques CSOM client, vous devez créer un ClientContext par rapport à la collection de sites d’administration du client. Le compte d’utilisateur doit être un compte d’administrateur client.

ClientContext ccTenant = new AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(String.Format("https://{0}-admin.sharepoint.com/", tenantName), String.Format("{0}@{1}.onmicrosoft.com", userName, tenantName), password);

Une fois clientContext prêt, vous pouvez utiliser le code suivant pour obtenir l’état de partage externe et une liste d’utilisateurs externes.

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

Voir aussi