Я пытаюсь найти на сервере LDAP все элементы с точно указанными атрибутами.
Схема LDAP, с которой я имею дело, записывает роли пользователей по:
- создание типа объекта, который может содержать любой из нескольких атрибутов (ролей), и
- установка значения каждой роли таким же, как ее имя
Атрибуты не имеют общего базового типа, а объектный класс ("roleuser") содержит другие атрибуты, которые не являются ролями. Роли различаются по именам атрибутов, которые заканчиваются на «Роль». (Тьфу.)
Пример. Типы объектов пользователя будут включать в себя тип объекта roleuser и могут иметь следующие пары атрибуты = значение:
cn=userX
objectclass=roleuser,...
managerrole=managerrole
clerkrole=clerkrole
cn=userY
objectclass=roleuser,...
managerrole=managerrole
cn=userZ
objectclass=roleuser,...
clerkrole=clerkrole
Я могу искать клерков, менеджеров и клерков менеджеров. Но когда я смотрю клерков (с (&(clerkrole=*)(objectclass=roleuser))
), я возвращаю пользователей как с клерком ролей (userZ), так и с менеджерами ролей и клерком (userX).
Я мог бы указать (&(clerkrole=*)(!managerrole=*)(objectclass=roleuser))
), чтобы получить клерков, которые не являются менеджерами. Но это потребовало бы, чтобы я перечислил (и отрицал) все возможные другие роли.
По разным причинам я не хочу, чтобы мое приложение знало все возможные роли, поскольку они могут меняться быстрее, чем мое приложение.
Итак. Есть ли способ запросить схему для всех атрибутов, которые находятся в roleuser
и имеют имя *role
, чтобы я мог динамически указывать (и отменять) все другие роли?
Или есть способ выполнить запрос (clerkrole = *), и в этом роли пользователя нет другого атрибута с именем * role?