WackoWiki : AlexKulikov/WackoACL

Мысли про ACL и производительность


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




Страницы статистики генерятся очень долго, потому что надо проверить ACLs к каждой записи. Это одна из причин, по которой они не наследуются на лету.

Ещё одна наследственная проблема — все связи «родитель-ребёнок» и вообще «предок-потомок» существуют только в голове пользователей =). Ключ — супертаг, а не численный идентификатор. Благодаря этому, например, существует страница Page1/Page2/Page3, даже если не создана страница Page1/Page2 и даже если не создана страница Page1.




Более того, тот же мускул много быстрее выполняет запросы c проекциями по полям типа INT нежели varchar. Решив задачу грамотного хранения отпадёт вопрос наследствия ACL, ровно как и дупликация многие запросов при построении статистики (не уверен, но догадываюсь, что дело обстоит именно так).

Фишку с тегами можно решить создавая пустые промежуточные страницы маркируя их неким флагом, чтобы они не попадали в список «wanted pages».


Дополнения:






Роман Ивановничего не понимаю =)

но надеюсь, что вы трое договоритесь =)
16.09.2003 15:21:28
Sad Weaselжалко... Я так старалась понятно написать...16.09.2003 15:21:51
Роман Ивановдавай объясню, чего не понимаю =)16.09.2003 15:22:19
Роман Иванов"ACL лежит рядом со страницей" – это как? оно ж в соседней таблице лежит16.09.2003 15:22:33
Роман Иванов"хранить «наборы прав" – из чего оно состоит?16.09.2003 15:22:56
Sad Weasel>это как? оно ж в соседней таблице лежит

да, но они связаны 1 к 1. Еще сильнее ускорить можено только сложив в ту же страницу, и все.
16.09.2003 15:23:25
Роман ИвановЧто такое "родительская страница"?16.09.2003 15:23:33
Sad Weasel>из чего оно состоит
Сейчас там напишу.

>Что такое "родительская страница"?
Там дальше написано – это страница, при редактировании ACL которой правится этот набор.
16.09.2003 15:24:16
Роман Ивановэто я видел.

не понимаю пока.
жду про набор пояснения =)
16.09.2003 15:26:13
Sad Weasel«Набор прав» – это три строки, описывающие, кто может читать, писать, комментировать что-то. Что-то не указывается, т.о. набор прав может описывать права на любую страницу.16.09.2003 15:26:34
Sad Weasel"*", "Вася","$" – это пример набора прав.
Если родительская страница у него "Кластер", то при редактировании ACL страницы "Кластер" ты сможешь его изменить.

При создании страницы Кластер/ПодСтраница в нее не скопируется эта конструкция, а подставится просто ссылка на нее.
16.09.2003 15:29:14
Роман Ивановничего не понимаю =(((((((16.09.2003 15:29:54
Роман Ивановкогда я захожу в правку АКЛ для Кластер/Подстраница, что я там вижу?16.09.2003 15:30:16
Sad WeaselТы там видишь "Права этой страницы определяются набором прав <Кластер>" (можно ридонли описание)

И кнопки "Создать тут новый набор прав". "Сменить на другой набор прав"
Около "Сменить" – список всех наборов в системе, включая набор по умолчанию.
16.09.2003 15:32:14
Роман Ивановуй, нет.

такого не будет.

извини, конечно, но это бред =(
16.09.2003 15:32:42
Kusoне уверен, что это бред.16.09.2003 15:37:15
Роман Ивановя почти уверен16.09.2003 15:38:04
Kusoтолько там галочка стоит
"Использовать настройки доступа от страницы уровнем выше"
и когда ты её отключаешь, то появляются (без перезагрузки страницы, конечно) любимые текстареи аклей. А когда включаешь — пропадают.
16.09.2003 15:38:20
Kusoимхо надо более restrictive ограничения просто наложить на идею и порезать сущность "набор прав"16.09.2003 15:38:42
Роман Ивановвот такое чуть лучше.

но САМУЮ МАЛОСТЬ имхо.
16.09.2003 15:39:01
Kusoреально наиболее часто используемая фича — это наследование у родителя. я бы даже сказал, это единственно используемая фича этого решения.
она нужная. сейчас я это делаю на группах, но когда групп станет 20–30, это будет пиздец. учитывая, что в каждой группе по 2–3 человека и что группы в группы вкладывать нельзя.
16.09.2003 15:40:15
Роман Ивановнаследования недостаточно.

нужно уметь добавлять к наследуемым наборам некий небольшой пис, ограничивающий или наоборот расширяющий права.
16.09.2003 15:41:04
Kusoа вот это уже пиззздец производительности ощутимый.16.09.2003 15:41:31
Kuso(в два раза, т.е.)16.09.2003 15:41:35
Роман Ивановя знаю.

а что делать?
16.09.2003 15:41:49
Kusoесли мы на него готовы, то делать его. в полный рост, без малейшего страха и упрёка.
если не готовы, то делать как предлагает визель.
16.09.2003 15:42:22
Роман Ивановкак предлагает визель интерфейсно бред.

как предлагаешь ты – ничуть не лучше того как сейчас – просто мы столкнёмся с другими проблемами. Топологически эквивалентными имеющимся, имхо.
16.09.2003 15:43:14
Роман Ивановпроблемами в использовании, я имею в виду16.09.2003 15:43:26
Kusoтогда решение Макарова лучше, хотя интерфейсно говённей.16.09.2003 15:43:52
Роман Ивановкаково решение Макарова в двух словах?16.09.2003 15:44:06
Sad Weasel<нужно уметь добавлять к наследуемым наборам некий небольшой пис, ограничивающий или наоборот расширяющий права.>

Ну и чем тебе плох вариант с созданием нового набора на основе предыдущего? UI пока не трогаем, я про механизм.
16.09.2003 15:45:14
Роман Ивановя не понимаю твоего механизма =(16.09.2003 15:45:29
Роман Ивановобновил16.09.2003 15:46:59
Sad WeaselТак. Еще по-подробнее.

Есть три набора прав "совсекретно", "для друзей", "публично".
"совсекретно" – "Я,Я,Я"
"для друзей" – "Друзья,Я,*"
"публично" – "*,*,*"

ок ?
16.09.2003 15:47:28
Sad Weasel(Это был пример).16.09.2003 15:47:40
Роман Ивановне ок, я считаю, что такой подход прямо перпендикулярен существующему подходу.

в другом ПО он имеет право на существование, но не в этом.

=(
16.09.2003 15:48:32
Sad Weaselтогда не говори, что ты не понимаешь, а говори, что идеологически не согласен. Это типа очень разные вещи.16.09.2003 15:49:15
Роман Ивановнет, я целиком не понимаю.16.09.2003 15:49:34
Роман Иванова вот этот кусок понял и он мне не нравится =(16.09.2003 15:49:43


YuliaShabunio Главная фишка моего подхода – это производительность.

YuliaShabunioА сам термин «набор прав» можно вообще никому никогда не показывать. Интерфейс можно не менять вообще. Но это плохо тем, что пользователь не увидит, какие права наследуются, а какие он уже поправил и они больше не будут меняться при правке ACL родителя.

YuliaShabunio Если делать из вики «Дерево», то проблема определения, какие ACL менять при правке корня, а какие не трогать, никуда не девается. И ее тоже надо решать.

YuliaShabunio
Я попробовала систематизировать разные подходы к проблеме. И вот что получилось: /Yulia Shabunio / Wacko ACL

Авто Наследствие


Тут пришла идея промежуточного решения для R4 — добавить при изменении ACL флажок «наследовать», судя по структуре БД можно будет изменить все ACL подстраниц одним запросом.