Compartilhar via


Modificar permissões de site do SharePoint e obter status de compartilhamento externo

Você pode usar o exemplo Core.SitePermissions para modificar os administradores da coleção de sites em qualquer coleção de sites, incluindo aqueles para OneDrive for Business em locatários Office 365. Este exemplo também mostra como obter status de compartilhamento externo para instalações multilocatários Office 365.

Usando um aplicativo de console, você cria um objeto ClientContext para obter permissões para listar e/ou modificar administradores e obter status de compartilhamento externo. Você também cria um suplemento registrado usando tokens OAuth.

Antes de começar

Para começar, baixe o suplemento de exemplo Core.SitePermissions do projeto Office 365 Padrões e Práticas do Desenvolvedor no GitHub.

Observação

The code in this article is provided as-is, without warranty of any kind, either express or implied, including any implied warranties of fitness for a particular purpose, merchantability, or non-infringement.

Trabalhar com administradores de conjunto de sites

Para atualizar os administradores de uma coleção de sites, você deve ser um administrador da coleção de sites. A primeira etapa é criar um objeto ClientContext por um usuário com as permissões certas.

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

Usando o objeto ClientContext , você pode obter uma lista dos administradores atuais da coleção de sites ou atualizar os administradores do conjunto de sites, conforme mostrado no exemplo a seguir.

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

Você pode definir os administradores da coleção de sites para coleções de sites em que ainda não é um administrador de coleção de sites criando um objeto ClientContext usando um suplemento registrado. Aqui, o objeto ClientContext é baseado em um token OAuth com permissões no nível do locatário.

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

Depois de fazer isso, você pode usar o código a seguir para obter um objeto ClientContext para este suplemento.

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

Trabalhar com compartilhamento externo (somente Office 365 MT)

Esse cenário mostra como obter o compartilhamento externo status de uma coleção de sites e obter uma lista de usuários externos para uma coleção de sites específica ou para todo o locatário. Como isso requer as bibliotecas CSOM de locatário, você precisa criar um ClientContext em relação ao conjunto de sites de administrador de locatários. A conta de usuário precisa ser uma conta de administrador de locatário.

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

Depois que o ClientContext estiver pronto, você poderá usar o código a seguir para obter o status de compartilhamento externo e uma lista de usuários externos.

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

Confira também