LINUX.ORG.RU

LDAP - реализовать управление правами

 


0

1

Товарищи, помогите, я уже голову сломал. Реализуется ли моя задача на LDAP?
Задача такая. У каждого пользователя может быть несколько ролей. Роли бывают двух типов - простые и сложные. Простая роль состоит только из имени, сложная - из имени и ещё одного атрибута, скажем, класса.

Когда-то давно я работал с Notes, там подобное было легко и естественно. А как (и можно ли) в LDAP такое описать...

Пример.
Дать пользователю cn=xellos права: (name=role1)(name=role2)(name=role3, class=class1)
А так же дать пользователю cn=sin_a права: (name=role3, class=class2)(name=role3, class=class3)

Да, сервер - AD.

★★★★★

Последнее исправление: Xellos (всего исправлений: 2)
Ответ на: комментарий от sin_a

Нет, не то. Тут вопрос в том, чтобы избежать оверхеда с самими группами. Если у меня десять ролей и шесть из них делятся на пять классов, то на группах это получается 34 группы. Так или не так? А завтра появится ещё пара ролей и пара классов. И число групп вырастет до сотни. Это хорошо? По-моему, это плохо.
А если не группами, то чем? Атрибутами? Но сложных атрибутов в LDAP не бывает...

Xellos ★★★★★
() автор топика
Ответ на: комментарий от Xellos

Если идти путём, который ты выбрал, то я бы завёл два multi-атрибута, и записывал роли и классы в них.

dn: cn=vasya,ou=people,dc=ex,dc=com
cn: vasya
...
role_attr: role1
role_attr: role2
class_attr: class1

В чём тут может возникнуть проблема не ясно.

Но я бы подумал о том, как их раскидать в группы, возможно вложенные. Я думаю что это может быть удобней в дальнейшем, хотя всё зависит от задачи. Да и по атрибуту закидать людей в нужные группы, когда понадобится, тоже проблемы не представляет. Чтобы не плодить группы можно, сделать отдельные группы для ролей и для классов и смотреть их пересечения. В общем с первым вариантом разница не велика.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

role_attr: role1
role_attr: role2
class_attr: class1

Нет, так нельзя. class1 относится конкретно к role3. Может быть ещё role4 вместе с class2, но в role3 у человека не будет class2, это совсем другой случай!
Как бы это на пальцах... «работа в организационном подразделении по проекту». Каждый пользователь может быть приписан к определённому подразделению в рамках определённого проекта. Или нескольких. Есть роли/подразделения, которые общие, не зависят от проектов.

Xellos ★★★★★
() автор топика
Ответ на: комментарий от Xellos

Если я правильно понял, то для role1 должен быть свой class3, а для role2 свой class5, так?

Тогда заведи атрибут и прописывай в нём role1_class3, если так устроит.

Если нет, то придётся мудрить с группами. Например взять контейнер ou=roles, завести в нём ou=role1, ou=role2, а в них уже группы cn=class1, cn=class3 и т.п. И включать туда участников.

Если в софте есть поддержка вложенных групп, то можно включать в классы подклассы. Групп будет много, но меньше вряд ли получится сделать.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

прописывай в нём role1_class3

Это, конечно, можно, но костыль же. Хочется чтобы красиво. И чтобы можно было сделать выборку по роли. Или по классу.

взять контейнер ou=roles, завести в нём ou=role1, ou=role2, а в них уже группы cn=class1, cn=class3

Они пересекаются. Наборы <role, class> могут быть любыми и в любых количествах.

Xellos ★★★★★
() автор топика
Ответ на: комментарий от Xellos

Они пересекаются. Наборы <role, class> могут быть любыми и в любых количествах.

Если у тебя каждой роли должен соответствовать свой класс, то для каждой роли тебе по-любому придётся заводить свой набор классов. А учитывая, что у одного человека может быть несколько ролей, в саму учётку ты это не впихнёшь.

Либо attr: role1_class2, либо по ou=roleX и группам в ней. Другого ничего в голову не приходит. Пересечение групп ты ту не сделаешь.

Ivan_qrt ★★★★★
()

RBAC же. Сделать группы и наделить их ролями/правами.

Или как ты будешь права разруливать. Каждый раз править профиль юзера? А если внести изменения нескольким юзерам в их права?

Deleted
()
Ответ на: комментарий от Ivan_qrt

Суть в том, что если бы я мог делать сложные атрибуты - я мог бы сделать атрибут role, который состоит из cn и class.

Xellos ★★★★★
() автор топика
Ответ на: комментарий от Ivan_qrt

Так. Беру перерыв на подумать.

Xellos ★★★★★
() автор топика

(name=role1) (name=role2) (name=role3, class=class1)

(name=role3, class=class2, class=class3)

Насколько я понимаю, тебе необходимо таблицу уложить в дерево? По видимому только для каждой записи единицы в таблице создавать запись в дереве. Проблема, если я правильно понял, в последующем обслуживании?

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

По видимому только для каждой записи единицы в таблице создавать запись в дереве

Это печально.

Xellos ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.