Проектирование базы данных для ACL - PullRequest
1 голос
/ 11 февраля 2012

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

По сути, это то, что я хотел сделать (гораздо сложнее, но этого достаточно, чтобы продемонстрировать, что я имею в виду):

  • пользователь: (идентификатор, имя, пароль)
  • статья: (id, название, тело)
  • image: (id, title, file_name)
  • разрешение: (item_type, item_id, user_id, чтение, запись, управление)

(itemType и itemId вместе представляют собой составной внешний ключ, ссылающийся на статью или изображение, в зависимости от item_type)

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

По-моему, это будет нормально работать. Но когда дело доходит до реализации, я не смог найти ни одной php orm, чтобы дать мне свободу делать это. Это привело меня к мысли, что я могу делать что-то не так.

Итак, мои вопросы: Как правильно реализовать ACL и создать базу данных для этого? Как это делается для приложений уровня предприятия? Существуют ли решения ACL, не относящиеся к дБ,?

1 Ответ

1 голос
/ 11 февраля 2012

Вам просто нужна одна таблица many-to-many, которая будет привязывать пользователей к разрешениям и, возможно, объектам, которые решат вашу проблему. Он будет иметь - user_id и license_id и object_id будут ссылаться на 3 разные таблицы.

Значит, будет что-то вроде:

user_id(references users),permission_id(references permissions),object_id (references image?)
1 ,2(read),2
1 ,3(write),2
1 , 4(exec),2

надеюсь, что это поможет abit

...