修改 SharePoint 网站权限并获取外部共享状态
Core.SitePermissions 示例可用于修改任何网站集上的网站集管理员,包括 Office 365 租户上 OneDrive for Business 的网站集管理员。 此示例还展示了如何获取 Office 365 多租户安装的外部共享状态。
通过控制台应用,可以创建 ClientContext 对象,获取列出和/或修改管理员的权限,并获取外部共享状态。 还可以使用 OAuth 令牌创建已注册的加载项。
准备工作
若要开始,请从 GitHub 上的 Office 365 开发人员模式和做法项目下载 Core.SitePermissions 示例加载项。
注意
本文中的代码按原样提供,不提供任何明示或暗示的担保,包括对特定用途适用性、适销性或不侵权的默示担保。
处理网站集管理员
若要更新网站集管理员,必须是此网站集的管理员。 第一步是以拥有相应权限的用户身份创建 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();