Вы можете взглянуть на оверлейную группу для OpenLDAP , которая заполняет членство в группе cutomerInfoEditor на основе фильтра, а не использования вложенных групп.
Вы можете использовать вложенные группы в вашем каталоге и обрабатывать их в коде.Если ваш customerInfoEditor only содержит один уровень вложенных групп (т.е. его члены являются группами, но ни одна из этих групп не имеет группы в качестве участников), вы можете создатьфильтр на основе списка членов customerInfoEditor.
Если членами customerInfoEditor являются группы "financeUsers", "salesUsers" и "whatOtherUsers", ваш фильтр, определяющий, будет ли назначен конкретный пользователь, USERINPUT, этой роли:
(&(uid=USERINPUT)(|(memberOf=financeUsers)(memberOf=salesUsers)(memberOf=whateverOtherUsers))
|это или оператор.Фильтр говорит, что найти пользователя где ((uid - это значение, с которым пользователь аутентифицировался) И (они являются участником financeUsers ИЛИ участником salesUsers ИЛИ участником whatOtherUsers))
Использование кода для построенияили компонент фильтра позволяет вам переопределить то, что дает кому-то право на роль customerInfoEditor без изменений кода - добавьте еще AnotherGroupOfUsers в качестве члена customerInfoEditor, и ваш фильтр динамически изменится, включив эту группу.
Возможно, вы сможете немного ускорить запрос, получив полное имя пользователя (FQDN) и изменив базу поиска на полное доменное имя пользователя.Тогда фильтр будет просто
(|(memberOf=financeUsers)(memberOf=salesUsers)(memberOf=whateverOtherUsers))
. В любом случае получение 1 записи означает, что им должен быть предоставлен доступ.0 означает, что они не должны быть.И> 1 странно - я обычно выкидываю ошибку, приказывая пользователю позвонить в нашу службу поддержки в этом случае.
Если ваши группы ролей, такие как customerInfoEditor, могут иметь несколько уровней вложенности (члены financeUsers являются членами, но члены financeUsers являются группами, такими как accountRecievableUsers, accountsPayableUsers, cfoUsers, и некоторые из этих групп могутдаже иметь группы в качестве участников) тогда ... ну, лично, так как я делаю всю свою подготовку автоматически ... я просто добавлю еще одно событие "добавить в группу" в свой рабочий процесс подготовки для всех этих групп и не использовать глубоко вложенные группы.Когда я добавляю кого-то в cfoUsers, я также добавляю к customerInfoEditor, и группа ролей будет содержать только учетные записи пользователей в качестве участников.
Но если нет другой альтернативы, единственное, что я знаю, это управление расширением группы в вашем коде.Что касается ввода / вывода, это дорого, потому что вам нужно посмотреть на все группы, членом которых является человек, проверить, в каких членах группы, проверить, чтобы увидетьк чему принадлежат эти группы.Если вы имеете дело только с одной ролью, вы можете выйти из расширения, как только роль найдена, но если вам нужно искать несколько групп ролей ... вам придется работать, пока вы не достигнете вершиныдерева и имел расширенный список всех групп, членом которых является прямой или косвенный член.И группы треков, которые вы уже расширили для обработки циклов, в противном случае A является членом B, B является членом C, C является членом D, D является членом A, становится бесконечным циклом расширения.