Назад | Перейти на главную страницу

хранить права пользователей и групп (ACL) для LDAP

Я пытаюсь сохранить разрешения ACL для LDAP. У меня есть разрешение для пользователей и для групп (пользователь принадлежит ко многим группам). Вот структура, которую я создаю:

 ou=Groups
    cn=Admin [posixGroup] {memberUid=andrew, memberUid=johny}
       cn=Right {resource:ftp1, action:all}
       cn=Right {resource:ftp2, action:all}
    cn=Editor [posixGroup] {memberUid=joseph}
       cn=Right {resource:ftp1, action:list}
 ou=People
    cn=andrew {uid=andrew}
       cn=Right {resource:ftp3, action:all}
    cn=johny {uid=johny}
    cn=joseph {uid=joseph}

в скобках указаны атрибуты {}. Что ж, когда Эндрю подключится к ftp3, я хотел бы проверить разрешения, поэтому я спрашиваю:

(|(memberUid=andrew)(uid=andrew))

но я получаю только родительские элементы cn = Rights: cn = andrew и cn = Admin. Можно ли написать запрос для возврата элементов cn = Right с использованием фильтра по элементам memberUid uid, определенным в родительских элементах? Или нужно как-то изменить структуру. Спасибо вам большое за ваше время. Андрей

Я считаю, что с вашей текущей схемой вам нужно будет выполнить два набора запросов:

  1. Используйте существующий запрос, чтобы найти подходящих пользователей и группы.
  2. Для каждой из найденных записей запросите каждую, чтобы узнать, есть ли у нее Right запись, установка базовое DN к записи, которую вы нашли на шаге 1.

Или вы можете изменить структуру, чтобы пользователи и группы имели многозначные right записи, возможно, что-то вроде:

cn=Admin [posixGroup] {memberUid=andrew, memberUid=johny,
                       right: ftp1/all, right: ftp2/all}
cn=Editor [posixGroup] {memberUid=joseph, right: ftp1/list}
...
cn=andrew {uid=andrew, right: ftp3/all}

Ваш запрос будет таким же, но вы получите right атрибуты в возвращаемом наборе (без дополнительных запросов). Или, если вы знаете уровень обслуживания и разрешений, запрошенные во время запроса, вы также можете указать это:

(&((|(memberUid=andrew)(uid=andrew)))(right=ftp3/all))

Если вы получили хотя бы один результат, значит, вы можете предоставить доступ; в противном случае запретить доступ.