Сообщите, существует ли пользователь в SharePoint Group через веб-сервис

Я работаю над внутренним веб-приложением, которое будет использовать предварительно определенные группы SharePoint для определения уровня безопасности пользователя. Я провел некоторое исследование и обнаружил, что веб-служба SharePoint "группа пользователей" имеет метод "GetUserCollectionFromGroup()", который перечисляет всех пользователей в данной группе SharePoint.

Проблема, с которой я сталкиваюсь, заключается в том, что к некоторым предопределенным группам SharePoint добавлены группы Active Directory, а не отдельные пользователи. Поэтому, когда я вызываю GetUserCollectionFromGroup("Members"), я получаю одну запись для группы Active Directory "DOMAIN\domain users\". Есть ли способ проверить, является ли пользователь или группа Active Directory, к которой принадлежит пользователь, членом группы SharePoint, использующей только веб-службы SharePoint? Или мне нужно будет проверить группу SharePoint, а затем найти все группы Active Directory, чтобы узнать, является ли этот пользователь также членом этой группы?

3 ответа

Решение

Группы безопасности Active Directory рассматриваются как "пользователи" в SharePoint. Вы не можете достичь этого так, как вы хотите.

Но поскольку у вас есть DOMAIN\group, вы можете расширить свой код после того, как вы нажмете API веб-сервисов SharePoint и использовать пространство имен System.DirectoryServices для разрешения ваших пользователей. Вы можете найти хороший пример того, как получить пользователей из группы здесь.

Код ниже проверит, входит ли пользователь в определенную группу. Это включает проверку любых членов группы AD. Вам нужно будет создать собственный веб-сервис SharePoint для вызова этого кода с удаленного компьютера. НТН

public static bool UserIsInGroup(SPUser user, SPGroup group)
        {
            try
            {
                using (SPSite site = new SPSite(group.ParentWeb.Site.ID, user.UserToken))
                {
                    using (SPWeb web = site.OpenWeb(group.ParentWeb.ID))
                    {
                        SPGroup impersonatedGroup = web.SiteGroups[group.Name];

                        return impersonatedGroup.ContainsCurrentUser;

                    }

                }



            }
            catch (Exception e)
            {

                 ///TODO: Log the exception
                  return false;

            }
        }

Смотрите ниже, чтобы получить все группы AD от пользователя
http://urenjoy.blogspot.com/2009/04/getting-active-directory-groups-from.html
и использовать группы AD в качестве пользователя sharepoint для получения групп sharepoint.

Другие вопросы по тегам