You are here

public function Server::groupUserMembershipsFromEntry in Lightweight Directory Access Protocol (LDAP) 8.3

Get list of all groups that a user is a member of by querying groups.

Parameters

mixed $user: A Drupal user entity, an LDAP entry array of a user or a username.

Return value

array|false Array of group dns in mixed case or FALSE on error.

See also

groupMembershipsFromUser()

1 call to Server::groupUserMembershipsFromEntry()
Server::groupMembershipsFromUser in ldap_servers/src/Entity/Server.php
Get list of all groups that a user is a member of.

File

ldap_servers/src/Entity/Server.php, line 1443

Class

Server
Defines the Server entity.

Namespace

Drupal\ldap_servers\Entity

Code

public function groupUserMembershipsFromEntry($user) {
  if (!$this
    ->groupGroupEntryMembershipsConfigured()) {
    return FALSE;
  }
  $userLdapEntry = $this
    ->userUserToExistingLdapEntry($user);

  // MIXED CASE VALUES.
  $allGroupDns = [];

  // Array of dns already tested to avoid excess queries MIXED CASE VALUES.
  $testedGroupIds = [];
  $level = 0;
  if ($this
    ->groupMembershipsAttrMatchingUserAttr() == 'dn') {
    $member_value = $userLdapEntry['dn'];
  }
  else {
    $member_value = $userLdapEntry['attr'][$this
      ->groupMembershipsAttrMatchingUserAttr()][0];
  }
  $groupQuery = '(&(objectClass=' . $this
    ->groupObjectClass() . ')(' . $this
    ->groupMembershipsAttr() . "={$member_value}))";

  // Need to search on all basedns one at a time.
  foreach ($this
    ->getBaseDn() as $baseDn) {

    // Only need dn, so empty array forces return of no attributes.
    $groupEntries = $this
      ->search($baseDn, $groupQuery, []);
    if ($groupEntries !== FALSE) {
      $maxLevels = $this
        ->groupNested() ? self::LDAP_SERVER_LDAP_QUERY_RECURSION_LIMIT : 0;
      $this
        ->groupMembershipsFromEntryRecursive($groupEntries, $allGroupDns, $testedGroupIds, $level, $maxLevels);
    }
  }
  return $allGroupDns;
}