Получение пользовательских разрешений из Active Directory в группах SharePoint - PullRequest
4 голосов
/ 30 марта 2012

Мне была поручена работа с SharePoint, включающая следующий сценарий.

Пользователи находятся в группе активных каталогов с разрешениями, которые в некоторых случаях напрямую связаны с группой AD, а в некоторых случаях группа AD назначается группе SharePoint.

Мой вопрос: как я могу проверить разрешения SPUser, если пользователь не назначен напрямую группе / разрешению, но фактически находится в группе Active Directory? Мне нужно проверить уровень разрешений пользователя.

Например:

Пользователь: UserX Принадлежит группе AD «SHAREPOINT_POWER_USERS», и эта группа имеет разрешения «Участие» и принадлежит группе SharePoint «Группа поддержки ИТ».

Был бы способ программно получить это, так как пользователь не существует в привилегированных разрешениях или в группе sharepoint? Могу ли я получить доступ к этому, выполнив что-то вроде:

//Pseudocode to access groups
SPUser user = SPContext.Current.Web.CurrentUser;
SPGroupCollection collection = user.Groups;

Пожалуйста, дайте мне знать, как это работает.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 31 марта 2012

Легко. Используйте SPUtility.GetPrincipalsInGroup.

Хороший пример приведен в предыдущем посте: Получение членов доменной группы AD с использованием API Sharepoint

0 голосов
/ 28 апреля 2015

Вы можете пойти против 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;
}
0 голосов
/ 08 февраля 2014

если у меня есть пользователь AD UserX, добавленный в группу AD "TestADGroup" Теперь в sharepoint у меня есть эта группа AD для "TestSPGroup"

следующее вернет true .. если UserX вошел в систему web.IsCurrentUserMemberOfGroup (web.Groups [ "TestSPGroup"] ID.);

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.iscurrentusermemberofgroup.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...