从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;

请告诉我这是怎么回事。

谢谢。

从SharePoint组中的Active Directory获取用户权限

简单。使用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;
}