Определение роли пользователя в узле / рабочей области SharePoint с использованием API веб-сервисов - PullRequest
2 голосов
/ 31 июля 2009

Как определить роль (и) пользователя на сайте с помощью API веб-сервисов? Все, что мне нужно, это имя пользователя и домен.

Я обнаружил, что PermissionsService.Permissions.GetPermissionCollection (url, "Web") вернет коллекцию разрешенных пользователей и групп с их масками разрешений, но мне все еще нужно выяснить, входит ли пользователь в какую-либо из групп а затем преобразуйте маски разрешений в коллекцию ролей.

Я чувствую, что есть лучший способ сделать это, и я просто скучаю по нему.

Ответы [ 3 ]

5 голосов
/ 26 августа 2009

Я решил нечто подобное - мой метод проверяет, назначена ли пользователю определенная роль. Вот алгоритм сначала:

  1. Проверка, назначена ли пользователю роль на сайте
  2. Если да - круто, если нет - получить все группы, членом которых является пользователь, и получить все группы, которым назначена эта роль.
  3. Сравните два. Если есть соответствие - круто, если нет - пользователю не назначена роль на этом уровне сайта.

И код:

public bool IsAssignedAPermission(string premissionName, string userLoginName)
    {
        XmlNode nodes;
        bool isAssignedAPermission;

        isAssignedAPermission = false;

        //Check if user is directly assigned a Full Control role
        try
        {
            nodes = userGroupService.GetRoleCollectionFromUser(userLoginName);
            using (XmlNodeReader reader = new XmlNodeReader(nodes))
            {
                DataSet ds = new DataSet();
                ds.ReadXml(reader);
                DataTable dt = ds.Tables[1];
                foreach (DataRow row in dt.Rows)
                {
                    string permission = row[1].ToString();
                    if (permission == premissionName)
                    {
                        isAssignedAPermission = true;
                        break;
                    }
                }
            }
        }
        catch
        {
            List<string> groupMemberships;
            List<string> fullControlGroups;

            //Check if user is a member of a Full Control group
            //This is done in three steps:

            //1. Get the list of groups the user is member of
            groupMemberships = new List<string>();
            nodes = userGroupService.GetGroupCollectionFromUser(userLoginName);
            using (XmlNodeReader reader = new XmlNodeReader(nodes))
            {
                DataSet ds = new DataSet();
                ds.ReadXml(reader);
                DataTable dt = ds.Tables[1];
                foreach (DataRow row in dt.Rows)
                {
                    string groupName = row[1].ToString();
                    groupMemberships.Add(groupName);
                }
            }

            //2. Get the list of groups that have Full Control permissions
            fullControlGroups = new List<string>();
            nodes = userGroupService.GetGroupCollectionFromRole(premissionName);
            using (XmlNodeReader reader = new XmlNodeReader(nodes))
            {
                DataSet ds = new DataSet();
                ds.ReadXml(reader);
                DataTable dt = ds.Tables[1];
                foreach (DataRow row in dt.Rows)
                {
                    string groupName = row[1].ToString();
                    fullControlGroups.Add(groupName);
                }
            }

            //3. Check if user belongs to any of the Full Control groups
            foreach (string membership in groupMemberships)
            {
                if (fullControlGroups.Contains(membership))
                {
                    isAssignedAPermission = true;
                    break;
                }
            }
        }

        return isAssignedAPermission;
    }

Параметр метода userLoginName должен быть в форме домен \ имя пользователя, например, SHAREPOINT \ Борис. Я надеюсь, что помог. Приветствия

1 голос
/ 31 июля 2009

В этом сообщении в блоге я использую веб-сервис UserGroup для перечисления групп SharePoint, к которым принадлежит пользователь: http://www.theblackknightsings.com/ListAllSharePointGroupsAUserBelongsTo.aspx

0 голосов
/ 04 августа 2009

Попробуйте использовать метод GetRoleCollectionFromUser из веб-службы UserGroup . Он предоставит вам список ролей, которым пользователь принадлежит на вашем сайте.
Просто передайте его как параметр вашего домена \ userName.

Найти его определение здесь: http://msdn.microsoft.com/en-us/library/ms772680.aspx
Возвращенный xml будет выглядеть примерно так, тогда вы просто получите необходимую информацию.

<GetRoleCollectionFromUser xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/">
<Roles>
<Role ID="1073741829" Name="Full Control" Description="Has full control." Order="1" Hidden="False" Type="Administrator" BasePermissions="FullMask" />
<Role ID="1073741825" Name="Limited Access" Description="Can view specific lists, document libraries, list items, folders, or documents when given permissions." Order="8" Hidden="True" Type="Guest" BasePermissions="ViewFormPages, Open, BrowseUserInfo, UseClientIntegration, UseRemoteAPIs" />
</Roles>
</GetRoleCollectionFromUser>
...