You are here

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

Get list of groups that a user is a member of using the memberOf attribute.

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::groupUserMembershipsFromUserAttr()
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 1386

Class

Server
Defines the Server entity.

Namespace

Drupal\ldap_servers\Entity

Code

public function groupUserMembershipsFromUserAttr($user) {
  if (!$this
    ->groupUserMembershipsFromAttributeConfigured()) {
    return FALSE;
  }
  $groupAttribute = $this
    ->groupUserMembershipsAttr();

  // If Drupal user passed in, try to get user_ldap_entry.
  if (empty($user['attr'][$groupAttribute])) {
    $user = $this
      ->userUserToExistingLdapEntry($user);
    if (empty($user['attr'][$groupAttribute])) {

      // User's membership attribute is not present. Either misconfigured or
      // the query failed.
      return FALSE;
    }
  }

  // If not exited yet, $user must be $userLdapEntry.
  $userLdapEntry = $user;
  $allGroupDns = [];
  $level = 0;
  $membersGroupDns = $userLdapEntry['attr'][$groupAttribute];
  if (isset($membersGroupDns['count'])) {
    unset($membersGroupDns['count']);
  }
  $orFilters = [];
  foreach ($membersGroupDns as $memberGroupDn) {
    $allGroupDns[] = $memberGroupDn;
    if ($this
      ->groupNested()) {
      if ($this
        ->groupMembershipsAttrMatchingUserAttr() == 'dn') {
        $member_value = $memberGroupDn;
      }
      else {
        $member_value = $this
          ->getFirstRdnValueFromDn($memberGroupDn, $this
          ->groupMembershipsAttrMatchingUserAttr());
      }
      $orFilters[] = $this
        ->groupMembershipsAttr() . '=' . self::ldapEscape($member_value);
    }
  }
  if ($this
    ->groupNested() && count($orFilters)) {
    $allGroupDns = $this
      ->getNestedGroupDnFilters($allGroupDns, $orFilters, $level);
  }
  return $allGroupDns;
}