Active Directory / LDAP эквивалент пространств имен? - PullRequest
0 голосов
/ 13 января 2011

В коде у меня есть «сотрудники» с ролями в формате Category.Role, где Category - это тип роли.Например, Foo.Bar и Foo.Foobar - оба являются Foo ролями.Foo на самом деле не является пространством имен в моем проекте, но я думаю об этом таким образом.

Есть ли в Active Directory какой-либо контейнер или иерархическая роль / эквивалент группы, которую я могу назначить и / или прочитатьвне запроса LDAP, так что я мог бы запросить каждого с любой Foo ролью или определенной Foo.X ролью?

1 Ответ

1 голос
/ 14 января 2011

В Active Directory вы можете назначить группу членом другой группы.Итак, если я правильно понимаю, вам нужно создать группу AD с именем "Foo", а затем создать две подгруппы с именем "Foo.Bar" и "Foo.Foobar".Назначьте эти две подгруппы членами группы "Foo".

Затем для пользователя, назначенного в группу "Foo.Bar".Он будет в роли как "Foo", так и "Foo.Bar".Это означает, что если вы получили WindowsPrincipal этого пользователя, WindowsPrincipal.IsInRole ("Foo") и WindowsPrincipal.IsInRole ("Foo.Bar") вернут true.

Если вы не используете функцию IsInRole () дляпроверьте членство, но чистый запрос LDAP, боюсь, мы не сможем найти простой способ выяснить отношения вложенных групп.Если вы действительно хотите найти способ сделать один вызов запроса LDAP, попробуйте найти атрибут «tokenGroups» в объекте пользователя AD.Это вычисляемый атрибут, вычисляемый AD на лету.Он содержит всю информацию о вложенных группах.Единственное, что он хранит SID.Итак, вам нужно узнать SID вашей группы AD, преобразовать его в двоичный формат LDAP и выполнить запрос.

...