Modificación de permisos de sitio de SharePoint y obtención del estado de uso compartido externo
Puede usar el ejemplo Core.SitePermissions para modificar los administradores de la colección de sitios en cualquier colección de sitios, incluidos los de OneDrive para la Empresa en Office 365 inquilinos. En este ejemplo también se muestra cómo obtener el estado de uso compartido externo para Office 365 instalaciones multiinquilino.
Con una aplicación de consola, se crea un objeto ClientContext para obtener permisos para enumerar o modificar administradores y obtener el estado de uso compartido externo. También se crea un complemento registrado mediante tokens de OAuth.
Antes de empezar
Para empezar, descargue el complemento de ejemplo Core.SitePermissions del proyecto Office 365 Developer Patterns and Practices en GitHub.
Nota:
El código de este artículo se proporciona tal cual, sin garantía de ningún tipo, expresa o implícita, incluidas las garantías implícitas de aptitud para un propósito particular, comerciabilidad o ausencia de infracción.
Trabajar con administradores de colecciones de sitios
Para actualizar los administradores de una colección de sitios, debe ser administrador de la colección de sitios. El primer paso es crear un objeto ClientContext por un usuario con los permisos adecuados.
ClientContext cc = new AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(String.Format("https://{0}.sharepoint.com/sites/{1}", tenantName, siteName), String.Format("{0}@{1}.onmicrosoft.com", userName, tenantName), password);
Con el objeto ClientContext , puede obtener una lista de los administradores de colecciones de sitios actuales o actualizar los administradores de la colección de sitios, como se muestra en el ejemplo siguiente.
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);
Puede establecer los administradores de colecciones de sitios para colecciones de sitios en las que aún no sea administrador de colecciones de sitios mediante la creación de un objeto ClientContext mediante un complemento registrado. Aquí, el objeto ClientContext se basa en un token de OAuth con permisos de nivel de inquilino.
// 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.
Una vez hecho esto, puede usar el código siguiente para obtener un objeto ClientContext para este complemento.
ClientContext cc = new AuthenticationManager().GetAppOnlyAuthenticatedContext("https://tenantname-my.sharepoint.com/personal/user2", "<your tenant realm>", "<appID>", "<appsecret>");
Trabajar con uso compartido externo (solo Office 365 MT)
En este escenario se muestra cómo obtener el estado de uso compartido externo de una colección de sitios y obtener una lista de usuarios externos para una colección de sitios específica o para todo el inquilino. Dado que esto requiere las bibliotecas de CSOM del inquilino, debe crear un ClientContext en la colección de sitios de administración de inquilinos. La cuenta de usuario debe ser una cuenta de administrador de inquilinos.
ClientContext ccTenant = new AuthenticationManager().GetSharePointOnlineAuthenticatedContextTenant(String.Format("https://{0}-admin.sharepoint.com/", tenantName), String.Format("{0}@{1}.onmicrosoft.com", userName, tenantName), password);
Una vez que ClientContext esté listo, puede usar el código siguiente para obtener el estado de uso compartido externo y una lista de usuarios 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();