예제 #1
0
        private void GetExternalUsers(Office365Tenant tenant)
        {
            GetExternalUsersResults results = null;

            if (!string.IsNullOrEmpty(SiteUrl))
            {
                results = tenant.GetExternalUsersForSite(SiteUrl, Position, PageSize, Filter, SortOrder);
            }
            else
            {
                results = tenant.GetExternalUsers(Position, PageSize, Filter, SortOrder);
            }
            ClientContext.Load(results, r => r.TotalUserCount, r => r.UserCollectionPosition, r => r.ExternalUserCollection.Include(u => u.DisplayName, u => u.InvitedAs, u => u.UniqueId, u => u.AcceptedAs, u => u.WhenCreated, u => u.InvitedBy));
            ClientContext.ExecuteQueryRetry();
            foreach (var externalUser in results.ExternalUserCollection)
            {
                if (!ShowOnlyUsersWithAcceptingAccountNotMatchInvitedAccount)
                {
                    WriteObject(externalUser);
                }
                else if (!string.Equals(externalUser.InvitedAs, externalUser.AcceptedAs, System.StringComparison.OrdinalIgnoreCase))
                {
                    WriteObject(externalUser);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Returns a list all external users for a given site that have at least the viewpages permission
        /// </summary>
        /// <param name="web">Tenant administration web</param>
        /// <param name="siteUrl">Url of the site fetch the external users for</param>
        /// <returns>A list of <see cref="OfficeDevPnP.Core.Entities.ExternalUserEntity"/> objects</returns>
        public static List <ExternalUserEntity> GetExternalUsersForSiteTenant(this Web web, Uri siteUrl)
        {
            if (siteUrl == null)
            {
                throw new ArgumentNullException("siteUrl");
            }

            Tenant          tenantAdmin = new Tenant(web.Context);
            Office365Tenant tenant      = new Office365Tenant(web.Context);
            Site            site        = tenantAdmin.GetSiteByUrl(siteUrl.OriginalString);

            web = site.RootWeb;

            List <ExternalUserEntity> externalUsers = new List <ExternalUserEntity>();
            int pageSize = 50;
            int position = 0;
            GetExternalUsersResults results = null;

            while (true)
            {
                results = tenant.GetExternalUsersForSite(siteUrl.OriginalString, position, pageSize, string.Empty, SortOrder.Ascending);
                web.Context.Load(results, r => r.UserCollectionPosition, r => r.TotalUserCount, r => r.ExternalUserCollection);
                web.Context.ExecuteQuery();

                foreach (var externalUser in results.ExternalUserCollection)
                {
                    User user = web.SiteUsers.GetByEmail(externalUser.AcceptedAs);
                    web.Context.Load(user);
                    web.Context.ExecuteQuery();

                    var permission = web.GetUserEffectivePermissions(user.LoginName);
                    web.Context.ExecuteQuery();
                    var doesUserHavePermission = permission.Value.Has(PermissionKind.ViewPages);
                    if (doesUserHavePermission)
                    {
                        externalUsers.Add(new ExternalUserEntity()
                        {
                            DisplayName = externalUser.DisplayName,
                            AcceptedAs  = externalUser.AcceptedAs,
                            InvitedAs   = externalUser.InvitedAs,
                            InvitedBy   = externalUser.InvitedBy,
                            UniqueId    = externalUser.UniqueId,
                            WhenCreated = externalUser.WhenCreated
                        });
                    }
                }

                position = results.UserCollectionPosition;

                if (position == -1 || position == results.TotalUserCount)
                {
                    break;
                }
            }

            return(externalUsers);
        }
        /// <summary>
        /// Query the Tenant UPS based on Site Collection
        /// </summary>
        /// <param name="siteUrl"></param>
        /// <param name="invitedAs"></param>
        /// <returns></returns>
        public static List <SPExternalUserEntity> CheckExternalUserForSite(this ClientContext adminContext, ITraceLogger logger, string siteUrl, string invitedAs = "")
        {
            if (siteUrl == null)
            {
                throw new ArgumentNullException("siteUrl");
            }


            var externalUsers = new List <SPExternalUserEntity>();
            int pageSize      = 50;
            int position      = 0;
            GetExternalUsersResults results = null;

            var officeTenantContext = new Office365Tenant(adminContext);

            while (true)
            {
                logger.LogInformation($"Checking External User with {invitedAs} at start {position} and page size {pageSize}");

                results = officeTenantContext.GetExternalUsersForSite(siteUrl, position, pageSize, invitedAs, SortOrder.Ascending);
                adminContext.Load(results, r => r.UserCollectionPosition, r => r.TotalUserCount, r => r.ExternalUserCollection);
                adminContext.ExecuteQueryRetry();

                foreach (ExternalUser externalUser in results.ExternalUserCollection)
                {
                    externalUsers.Add(new SPExternalUserEntity()
                    {
                        AcceptedAs  = externalUser.AcceptedAs,
                        DisplayName = externalUser.DisplayName,
                        InvitedAs   = externalUser.InvitedAs,
                        InvitedBy   = externalUser.InvitedBy,
                        UniqueId    = externalUser.UniqueId,
                        UserId      = externalUser.UserId,
                        WhenCreated = externalUser.WhenCreated
                    });
                }

                position = results.UserCollectionPosition;

                if (position == -1 || position == results.TotalUserCount)
                {
                    break;
                }
            }

            return(externalUsers);
        }
예제 #4
0
        /// <summary>
        /// Returns a list all external users in your tenant
        /// </summary>
        /// <param name="web">Tenant administration web</param>
        /// <returns>A list of <see cref="OfficeDevPnP.Core.Entities.ExternalUserEntity"/> objects</returns>
        public static List <ExternalUserEntity> GetExternalUsersTenant(this Web web)
        {
            Tenant          tenantAdmin = new Tenant(web.Context);
            Office365Tenant tenant      = new Office365Tenant(web.Context);

            List <ExternalUserEntity> externalUsers = new List <ExternalUserEntity>();
            int pageSize = 50;
            int position = 0;
            GetExternalUsersResults results = null;

            while (true)
            {
                results = tenant.GetExternalUsers(position, pageSize, string.Empty, SortOrder.Ascending);
                web.Context.Load(results, r => r.UserCollectionPosition, r => r.TotalUserCount, r => r.ExternalUserCollection);
                web.Context.ExecuteQuery();

                foreach (var externalUser in results.ExternalUserCollection)
                {
                    externalUsers.Add(new ExternalUserEntity()
                    {
                        DisplayName = externalUser.DisplayName,
                        AcceptedAs  = externalUser.AcceptedAs,
                        InvitedAs   = externalUser.InvitedAs,
                        InvitedBy   = externalUser.InvitedBy,
                        UniqueId    = externalUser.UniqueId,
                        WhenCreated = externalUser.WhenCreated
                    });
                }

                position = results.UserCollectionPosition;

                if (position == -1 || position == results.TotalUserCount)
                {
                    break;
                }
            }

            return(externalUsers);
        }