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

另请参阅