Как я могу искать элементы с атрибутами, соответствующими указанному шаблону через LDAP? - PullRequest
0 голосов
/ 07 августа 2009

Я пытаюсь найти на сервере LDAP все элементы с точно указанными атрибутами.

Схема LDAP, с которой я имею дело, записывает роли пользователей по:

  1. создание типа объекта, который может содержать любой из нескольких атрибутов (ролей), и
  2. установка значения каждой роли таким же, как ее имя

Атрибуты не имеют общего базового типа, а объектный класс ("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?

1 Ответ

0 голосов
/ 12 августа 2009

Рассматривали ли вы создание фильтра динамически? Вы можете запросить схему и получить все атрибуты, оканчивающиеся на 'role', затем выполнить итерацию по ним, отбросив тот, который вы хотите, и добавив (! ___ role = *) для каждого элемента, а затем добавить фильтр для того, который вам нужен, и запросить используя это.

...