从SharePoint组中的Active Directory获取用户权限
本文关键字:Directory 获取 用户 权限 Active SharePoint | 更新日期: 2023-09-27 18:29:28
我的一些SharePoint工作涉及以下场景。
在某些情况下,用户位于active directory组中,其权限直接绑定到AD组,在某些情况中,AD组被分配到SharePoint组。
我的问题是,如果用户没有直接分配到组/权限,但实际上在Active Directory组中,我如何检查SPUser的权限?我需要检查用户的权限级别。
例如:
用户:UserX属于AD组"SHAREPOINT_POWER_USERS",此组具有"参与"权限,并且属于SHAREPOINT组"IT支持组"。
由于用户不存在于高级权限或共享点组中,是否有一种方法可以通过程序检索此信息?我可以通过执行以下操作来访问它吗:
//Pseudocode to access groups
SPUser user = SPContext.Current.Web.CurrentUser;
SPGroupCollection collection = user.Groups;
请告诉我这是怎么回事。
谢谢。
简单。使用SPUtility.GetPrincipalsInGroup
。
这里的老帖子中有一个很好的例子:使用Sharepoint API 获取AD域组的成员
如果我有一个AD用户UserX,则添加到AD组"TestADGroup"现在,在sharepoint中,我有这个AD组到"TestSPGroup"
以下将返回true。。如果UserX已登录网状物IsCurrentUserMemberOfGroup(web.Groups["TestSPGroup"].ID);
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.iscurrentusermemberofgroup.aspx
您可以直接对抗AD本身,获取成员的组,如果他们所属的组中有一个对对象具有权限,则授予权限(即显示对象等)。
尝试:http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#39
public ArrayList Groups(string userDn, bool recursive)
{
ArrayList groupMemberships = new ArrayList();
return AttributeValuesMultiString("memberOf", userDn,
groupMemberships, recursive);
}
public string AttributeValuesSingleString
(string attributeName, string objectDn)
{
string strValue;
DirectoryEntry ent = new DirectoryEntry(objectDn);
strValue = ent.Properties[attributeName].Value.ToString();
ent.Close();
ent.Dispose();
return strValue;
}
public string GetObjectDistinguishedName(objectClass objectCls,
returnType returnValue, string objectName, string LdapDomain)
{
string distinguishedName = string.Empty;
string connectionPrefix = "LDAP://" + LdapDomain;
DirectoryEntry entry = new DirectoryEntry(connectionPrefix);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
switch (objectCls)
{
case objectClass.user:
mySearcher.Filter = "(&(objectClass=user)
(|(cn=" + objectName + ")(sAMAccountName=" + objectName + ")))";
break;
case objectClass.group:
mySearcher.Filter = "(&(objectClass=group)
(|(cn=" + objectName + ")(dn=" + objectName + ")))";
break;
case objectClass.computer:
mySearcher.Filter = "(&(objectClass=computer)
(|(cn=" + objectName + ")(dn=" + objectName + ")))";
break;
}
SearchResult result = mySearcher.FindOne();
if (result == null)
{
throw new NullReferenceException
("unable to locate the distinguishedName for the object " +
objectName + " in the " + LdapDomain + " domain");
}
DirectoryEntry directoryObject = result.GetDirectoryEntry();
if (returnValue.Equals(returnType.distinguishedName))
{
distinguishedName = "LDAP://" + directoryObject.Properties
["distinguishedName"].Value;
}
if (returnValue.Equals(returnType.ObjectGUID))
{
distinguishedName = directoryObject.Guid.ToString();
}
entry.Close();
entry.Dispose();
mySearcher.Dispose();
return distinguishedName;
}