Ich versuche, einen einzelnen LDAP-Suchfilter zu schreiben, um Benutzer abzurufen, die Mitglied einer bestimmten Gruppe sind.
Wir verwenden eine benutzerdefinierte LDAP-Implementierung (läuft auf OpenLDAP: slapd 2.4.40), in der die Beziehungen zwischen Benutzern und Gruppen abgebildet werden Group (memberUid) -> User (uid)
.
Der Benutzer-LDIF hat keine memberOf-Attribute, was es unmöglich macht, den üblichen Ansatz von(&(objectClass=person)(memberOf=login_group))
Die Benutzer-LDIFs sehen folgendermaßen aus:
dn: uid=user1,ou=people,dc=example,dc=com
cn: user1
displayName:: User1
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
uidNumber: 2698
uid: user1
Die LDIF-Gruppe sieht folgendermaßen aus:
dn: cn=login_group,ou=groups,dc=example,dc=com
gidNumber: 1643
objectClass: posixGroup
objectClass: top
objectClass: groupOfUniqueNames
cn: login_group
memberUid: user1
memberUid: user2
Ist es möglich, eine einzelne LDAP-Abfrage zu schreiben, die das Äquivalent eines SQL JOIN- oder „IN“-Filters bewirkt, z. B.
SELECT u.* FROM user u WHERE u.uid IN (SELECT memberUid FROM group WHERE cn=login_group)
Es muss sich um eine einzelne Abfrage handeln, da sie zur Steuerung des Zugriffs auf ein Drittanbieterportal verwendet wird. Wir können die Clientimplementierung nicht ändern.