如何找出用户在使用Web服务API站点的作用(县)? 我所去的是用户名和域名。
我发现PermissionsService.Permissions.GetPermissionCollection(URL,“网络”)将返回允许用户和组的集合与他们的权限口罩,但我仍然需要弄清楚,如果用户是在任何一组,然后转换权限口罩进入角色集合。
我觉得有一个更好的方式来做到这一点,我只是失踪了。
如何找出用户在使用Web服务API站点的作用(县)? 我所去的是用户名和域名。
我发现PermissionsService.Permissions.GetPermissionCollection(URL,“网络”)将返回允许用户和组的集合与他们的权限口罩,但我仍然需要弄清楚,如果用户是在任何一组,然后转换权限口罩进入角色集合。
我觉得有一个更好的方式来做到这一点,我只是失踪了。
我已经解决了类似的东西 - 我的方法检查,如果用户分配一个特定的角色。 这里的算法首先:
和代码:
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 \鲍里斯。 我希望我帮助。 干杯
在这篇博客文章中,我使用用户组Web服务来列出用户所属的SharePoint组: http://www.theblackknightsings.com/ListAllSharePointGroupsAUserBelongsTo.aspx
尝试使用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>