Может ли пользователь быть частью нескольких поддеревьев в экземпляре службы каталогов (на основе Ldap)?
Я довольно новичок в программировании службы каталогов на основе ldap с использованием.net framework; следовательно, есть простой глупый вопрос.
Я хотел бы выяснить все поддеревья, к которым принадлежит конкретный пользователь, используя System.DirectoryServices.Protocol.
Прежде всего, может ли пользователь быть частью нескольких поддеревьев в "a" экземпляре службы каталогов? Если да, то как мне найти все поддеревья, к которым принадлежит конкретный пользователь, используя пространство имен "System.DirectoryServices.Protocol"?
Если пользователь принадлежит "только" конкретному поддереву, то, я думаю, я могу найти все DN поддерева из DN пользователя. Пожалуйста, дайте мне знать, если есть какой-либо другой эффективный способ?
Обновить:
Если говорить конкретно о моем вопросе, учитывая, что это DN моего пользовательского объекта - "uid=DaffyD,OU=Ducks,OU=People,O=A", может ли он существовать в другом OU прямо или косвенно? Например, может ли "OU = Ducks" быть частью какого-либо другого OU, кроме "People"?
Тогда мой следующий вопрос, без каких-либо манипуляций со строками DN пользователя, могу ли я как-то найти имена DN родительских узлов, которые этот пользователь эффективно использует System.DirectoryService.Protocol?
2 ответа
Я не уверен, что вы подразумеваете под "принадлежностью" пользователя к поддереву. Пользовательский объект будет существовать по одному пути в каталоге, и его DN скажет вам, что это за путь (на практике это наоборот: вы знаете DN, а затем находите объект). В этом весь смысл отличительного имени DN ==: уникально называть объекты.
Конечно, пользователь может принадлежать к нескольким группам (как функция Active Directory); эти группы распределены по каталогу. Не уверен, ссылались ли вы также на группы при использовании слова "принадлежать".
Редактировать: так как любой тип пользовательского объекта может иметь только один родительский OU, аналогично, каждый OU может иметь только один родительский контейнер (обычно O или OU). Весь каталог образует дерево, ни один узел не может иметь двух родителей.
Каркас обрабатывает только DN как строки. Однако доступны сторонние библиотеки анализаторов DN.
Это основано исключительно на моем опыте работы с Active Directory - но я бы предположил, что другие каталоги LDAP будут обрабатывать это аналогично:
Нет, пользователь существует только один раз и, следовательно, может быть расположен только в одном контейнере (обычно это OrganizationalUnit). Насколько я знаю, понятия "символические ссылки" для пользователей не существует.
И почему вы действительно хотите, чтобы пользователь существовал в нескольких местах?
Если вы хотите, чтобы пользователь был частью нескольких поддеревьев для обработки разрешений, вы все делаете неправильно - вы не должны основывать свои решения на том, разрешать или нет пользователю какую-либо операцию в его "местоположении" в LDAP. иерархия, а точнее на членство в группе.
Группы LDAP - это то, что предназначено для обработки разрешений, и пользователь может быть членом любого числа групп - там у вас есть отношение 1:n - пользователь может быть членом групп, и эти группы отвечают за обработку разрешений.
Марк