使用Web服务API确定SharePoint网站/工作区用户的角色(Determining User

2019-09-21 16:58发布

如何找出用户在使用Web服务API站点的作用(县)? 我所去的是用户名和域名。

我发现PermissionsService.Permissions.GetPermissionCollection(URL,“网络”)将返回允许用户和组的集合与他们的权限口罩,但我仍然需要弄清楚,如果用户是在任何一组,然后转换权限口罩进入角色集合。

我觉得有一个更好的方式来做到这一点,我只是失踪了。

Answer 1:

我已经解决了类似的东西 - 我的方法检查,如果用户分配一个特定的角色。 这里的算法首先:

  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 \鲍里斯。 我希望我帮助。 干杯



Answer 2:

在这篇博客文章中,我使用用户组Web服务来列出用户所属的SharePoint组: http://www.theblackknightsings.com/ListAllSharePointGroupsAUserBelongsTo.aspx



Answer 3:

尝试使用GetRoleCollectionFromUser方法从用户组 Web服务,它会给你该用户所属站点的角色列表。
只是把它作为参数传递您的域\用户名。

在这里找到它的定义: 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>


文章来源: Determining User's role in a SharePoint site/workspace using the webservices API