ACL наследуется от родительской страницы в момент создания.
Никакие дальнейшие изменения у родительской страницы не повлияют на дочерние.
Плюс – все просто и понятно
Минус – невозможно контролировать кластер целиком.
Тотальный контроль
ACL наследуется от родительской страницы в момент создания.
В последствии он может быть изменен.
Но при изменении в ACL родительской страницы все подстраницы автоматически получают тот же ACL вместо того, что был.
Плюс – всегда можно одним движением руки закрыть/открыть целый кластер
Минус – избирательные права на под-подкластеры неизбежно теряются.
Наследуем унаследованное
ACL наследуется от родительской страницы в момент создания.
В последствии он может быть изменен.
При изменении в ACL родительской страницы правятся только те подстраницы, ACL которых не менялся с момента создания или был возвращен в состояние, равное состоянию в момент создания.
Плюс – возможно контролировать весь кластер, не теряя тонкой настройки в под-подкластерах.
Минус – невозможно закрыть весь кластер одним движением – все равно нужно будет проверить каждую вложенную страницу.
Минус – неочевидно, почему у одних страниц ACL изменился, а у других – нет (Возможно, лечится удачным UI).
Родитель плюс пис
ACL наследуется от родительской страницы в момент создания.
В последствии он может быть дополнен. То есть права на кластер никуда не деваются, но можно дописать несколько строк дополнительных прав, ограничивающих или расширяющих права на этот подкластер.
Плюс – тотальный контроль над кластером, не мешающий тонкой настройке
Минус – необходимо умение писать «дополнения» к правам и понимание приоритетов.
Минус – невозможно разрешить какое-то действие в подкластере тому, кому в кластере его явно запретили.
Ссылка с ограничением
Если акл данной страницы содержит ссылку на другую страницу, то акл оттуда добавляется к аклу данной страницы.
Если в ACL есть ссылка, то:
Она должна быть только одна.
Она должна быть во всех трех типах прав.
Это значит, нельзя писать
@Page1
@Page2
или
read ("@Page1'), write ("@Page2").
Т.е. если Page1, то в r/w/c Page1 и только Page1.
YuriMakarov Почему такие ограничения?
Мне кажется они совсем не обязательны.
Технически реализовать только 1 список проще, несколько чуть сложнее (п1).
Пункт 2 тоже необязателен, к примеру – редактирование только автору, просмотр некоторой группе.
YuliaShabunio Ограничения возникли по той причине, что я, кажется, знаю нетормозной способ реализовать это счастье. Вариант без ограничений есть, но его быстрой реализации я не знаю.
Варианты реализации
Как сейчас
Для каждой страницы хранится отдельный ACL в базе данных.
Хорошо реализует сценарии
Как сейчас
Неплохо реализует
Тотальный контроль
Наследуем унаследованное
Почти невозможно реализовать
Родитель плюс пис
Плюс – довольно прост в реализации
Плюс – не надо шерстить базу данных
Плюс – не слишком медленно работает
Минус – не слишком быстро работает
Расчет ACL на лету
Для каждой страницы хранится отдельный ACL в базе данных. Но при расчете реального ACL учитываются в том числе права всех родителей
Хорошо реализует сценарии
– таких нет. Слишком большие проблемы с производительностью
Неплохо реализует
Родитель плюс пис
Наследуем унаследованное
Почти невозможно реализовать
Тотальный контроль
Можно, но зачем?
Как сейчас
Плюс – не надо шерстить базу данных
Минус – будет сильно тормозить
Превратим Ваку в дерево
База данных преобразована так, чтобы легко было определить родительскую страницу.
Хорошо реализует сценарии
Наследуем унаследованное
Неплохо реализует
Родитель плюс пис
Можно, но зачем?
Как сейчас
Почти невозможно реализовать
Тотальный контроль
Плюс – ?
Минус – надо сильно шерстить базу
Минус – производительность остается под вопросом.
Наборы прав
В отдельной таблице хранятся «наборы прав». В каждой странице лежит только ссылка на какой-нибудь набор.
Хорошо реализует сценарии
Наследуем унаследованное
Неплохо реализует
Родитель плюс пис
Почти невозможно реализовать
Тотальный контроль
Как сейчас
Плюс – производительность выше, чем сейчас
Минус – надо перешерстить таблицу acl
Минус – нельзя сделать переключение одной опцией в режим «Как сейчас», потому что нельзя реализовать «как сейчас».
RomanIvanov: То есть несовместимо со старым поведением. Это, я считаю, недопустимо.
AlexKulikov: Минус – сложно построить понятный интерфейс
YuliaShabunio Про интерфейс, пожалуйста, в пункт «поведение». На этой реализации можно сделать любое поведение, которое можно сделать, т.е любой интерфейс. Если непонятно, как именно – прошу конкретные вопросы.