Difference between revisions of "IntraACL/ru"
(→Рефакторинг кода) |
|||
Line 47: | Line 47: | ||
* Подсказывает, какие ещё права действуют на страницу (то есть права на пространства имён и категории). | * Подсказывает, какие ещё права действуют на страницу (то есть права на пространства имён и категории). | ||
* Подсказывает, когда вы не можете редактировать права страницы. | * Подсказывает, когда вы не можете редактировать права страницы. | ||
+ | |||
+ | === Право manage === | ||
+ | |||
+ | В оригинальном HaloACL права на изменение самих прав задаются неудобно — отдельной функцией парсера, и ни в коем случае не наследуются от включаемых шаблонов. Соответственно, невозможно просто взять и создать SD для страницы, включающий один шаблон и больше ничего, так как его никто не сможет изменить. | ||
+ | |||
+ | Вместе с тем и делать, чтобы права на изменение прав наследовались, тоже не очень правильно — нужно различать «управление правами страницы» и «управление шаблоном». То есть, хотелось бы иметь возможность выдать в шаблоне кому-нибудь права на управление страницей, но при этом не выдавать права на управление самим шаблоном. | ||
+ | |||
+ | В IntraACL это возможно — есть дополнительное право «manage» в составе обычной парсер-функции '''access''', которое и является «правом на управление страницей», но не действует на шаблон. Пример использования: | ||
+ | |||
+ | <pre>{{#access: assigned to = User:Someone | actions = *, manage}} | ||
+ | {{#manage rights: assigned to = User:Another}}</pre> | ||
+ | |||
+ | В чём же различие между '''actions=manage''' и '''manage rights'''? | ||
+ | |||
+ | * Если этот текст — часть прав (SD) страницы, разницы нет. Пользователи Someone и Another получат права на изменение этого SD. | ||
+ | * Если этот текст — часть прав (SD) категории или пространства имён, '''actions=manage''' даст пользователю Someone право редактировать права (SD) страниц, находящихся в этой категории или пространстве имён, '''но не даст''' прав на изменение SD самой этой категории или пространства имён. В то же время, '''manage rights''' даст Another права редактировать SD категории/пространства имён, но никак не отразится на его правах редактирования SD страниц. | ||
+ | * Если этот текст — часть шаблона прав (PR), '''actions=manage''' даст пользователю Someone право редактировать права (SD) страниц, в SD которых включён этот шаблон, но не даст ему редактировать шаблон. В то же время, '''manage rights''' даст Another права редактировать шаблон (PR), но никак не отра зится на его правах редактирования SD страниц, в которые этот шаблон включён. | ||
=== Упрощения === | === Упрощения === |
Revision as of 13:59, 22 February 2011
IntraACL — лучшее расширение для MediaWiki, связанное с поддержкой прав. Создано на основе отлаженного и очень сильно допиленного HaloACL.
Contents
Основные отличия
Редактор
thumb|right|200px|Редактор прав HaloACL В HaloACL интерфейс служебной страницы реализован неудобно, глючит и тормозит, на основе JavaScript-фреймворка YAHOO UI (в жизни к нему теперь не притронусь). Кроме того, он переусложнён (можно написать раз в 5 меньше кода), и ужасен с точки зрения удобства пользователя — он пошаговый и не очень интерактивный.
thumb|right|200px|Редактор прав IntraACL В IntraACL интерфейс гораздо дружелюбнее и написан на «голом» JavaScript’е, без использования каких-либо фреймворков вообще (кроме МедиаВиковского AJAX’а — sajax_do_call), посему работает очень шустро и приятно. Аналогично реализован и редактор групп, и списка шаблонов быстрого доступа.
Сравнение
Пример создания прав в редакторе HaloACL:
- Сначала нужно выбрать, что создаём — права, шаблон, или «личный шаблон».
- Потом выбрать на что создаём права — на страницу, категорию, namespace, свойство. Опция «свойство» не скрывается, даже если Semantic MediaWiki не установлена.
- Ввести имя и нажать «Далее». После этого поменять имя, естественно, уже нельзя.
- Нажать «Create right». Откроется страшная форма с кучей полей.
- Ввести имя и описание для «права». То есть словесное описание. Зачем оно — понятия не имею.
- Выбрать права галочками.
- Выбрать «кому» из 5 вариантов («мне», «набору юзеров/групп», «всем», «всем зарегистрированным», «всем анонимным»).
- Выбрать галочками, кому же всё-таки, в случае набора. Выбор ведётся из YUI TreeView, фильтруемого тут же, и со страшной силой тормозит.
- Чтобы просмотреть, кому что-то выдано сейчас, надо переключиться на другую вкладку.
- После этого нажать «Сохранить право». Но если вы думаете, что квест закончен и всё сохранилось, очень ошибаетесь.
- Нажать «Далее».
- Ещё одной такой же формочкой задать права на изменение самих прав.
- Нажать «Далее».
- Нажать «Сохранить».
Только после этого ваши права сохранятся. При всём этом процессе увидеть, какие реально получились права с учётом всех включений шаблонов и групп нельзя. Также нельзя увидеть реальный текст определения, который в действительности сохранится на страницу прав. Также в оригинале плохо работает и само сохранение — иногда оно сохраняет текст определения, но не разбирает его на права и они в итоге не действуют.
В IntraACL, с другой стороны, редактор интерактивный, не пошаговый и всегда показывает то, что будет сохранять.
- В любой момент можно поменять, что защищаем, добавить права, права на изменения прав или включения шаблонов.
- Везде работает автозаполнение (autocomplete) — подсказывает страницы, пространства имён, категории, пользователей, группы.
- При выборе пользователя или группы состояние флажков (✓) меняется так, чтобы отражать текущие права выбранного пользователя/группы.
- Причём, редактор подгружает включаемые определения групп и шаблонов и вычисляет реальные права, учитывая, если право было дано пользователю, потому что он находится в группе или если право дано через шаблон.
- Дать или отобрать права очень легко — нужно просто отметить или снять флажок. Текст определения прав при этом изменится.
- Кнопка «Сохранить» ровно одна :)
Панель
Переделана панель, появляющаяся при редактировании страниц:
- Не требует тяжёлого JavaScript’а.
- Сохраняет состояние при нажатии «Предпросмотра».
- Показывает ссылки на шаблоны быстрого доступа, чтобы можно было просмотреть их содержимое.
- Подсказывает, какие ещё права действуют на страницу (то есть права на пространства имён и категории).
- Подсказывает, когда вы не можете редактировать права страницы.
Право manage
В оригинальном HaloACL права на изменение самих прав задаются неудобно — отдельной функцией парсера, и ни в коем случае не наследуются от включаемых шаблонов. Соответственно, невозможно просто взять и создать SD для страницы, включающий один шаблон и больше ничего, так как его никто не сможет изменить.
Вместе с тем и делать, чтобы права на изменение прав наследовались, тоже не очень правильно — нужно различать «управление правами страницы» и «управление шаблоном». То есть, хотелось бы иметь возможность выдать в шаблоне кому-нибудь права на управление страницей, но при этом не выдавать права на управление самим шаблоном.
В IntraACL это возможно — есть дополнительное право «manage» в составе обычной парсер-функции access, которое и является «правом на управление страницей», но не действует на шаблон. Пример использования:
{{#access: assigned to = User:Someone | actions = *, manage}} {{#manage rights: assigned to = User:Another}}
В чём же различие между actions=manage и manage rights?
- Если этот текст — часть прав (SD) страницы, разницы нет. Пользователи Someone и Another получат права на изменение этого SD.
- Если этот текст — часть прав (SD) категории или пространства имён, actions=manage даст пользователю Someone право редактировать права (SD) страниц, находящихся в этой категории или пространстве имён, но не даст прав на изменение SD самой этой категории или пространства имён. В то же время, manage rights даст Another права редактировать SD категории/пространства имён, но никак не отразится на его правах редактирования SD страниц.
- Если этот текст — часть шаблона прав (PR), actions=manage даст пользователю Someone право редактировать права (SD) страниц, в SD которых включён этот шаблон, но не даст ему редактировать шаблон. В то же время, manage rights даст Another права редактировать шаблон (PR), но никак не отра зится на его правах редактирования SD страниц, в которые этот шаблон включён.
Упрощения
Убраны права на «добавление семантических аннотаций», «редактирование через форму», «редактирование через WYSIWYG-редактор», ибо приравнены просто к праву редактирования.
Убраны такие понятия, как «Личный шаблон по умолчанию» (Default user template), «Белый список» (Whitelist). Первое потому, что неудобно в одном месте задавать шаблон по умолчанию, а в другом — список шаблонов, доступных для быстрого выбора на панельке. Удобно в общем списке выбирать тот, который будет по умолчанию. Второе потому, что «белый список» только усложняет проверки — на страницы можно просто раздать права на чтение, что будет эквивалентно.
Убрана возможность перевода названий функций парсера и их параметров, ибо нефиг разводить 1С («Если (хаха) то (хаха) КонецЕсли»). Названия всегда на английском.
Рефакторинг кода
Огромный объём рефакторинга. Например, константы перемещены из отдельный классов в общий, локализация упрощена, функции парсера более не полагаются на то, что при сохранении статья будет parse’иться, а также позволяют массовое редактирование и импорт/экспорт (то есть редактирование нескольких страниц за запрос). Разрешается изменение некорректных определений, дабы если что, пользователям не приходилось тут же бежать к админам.
Общие черты
Все определения прав, групп и т. п. хранятся как вики-страницы в специальном пространстве имён ACL.
Также полностью совместим интерфейс для расширений (метод Title::userCanReadEx()).
Терминология
Терминология в основе прав HaloACL и IntraACL лежит общая:
SD (Security Descriptor)
Права для чего-нибудь. Чем-нибудь может быть страница, категория, пространство имён. В Semantic MediaWiki чем-нибудь также может быть свойство (property). SD может включать в себя IR (Inline Rights), включение PR (Predefined Rights), и права на изменение самого SD.
PR (Predefined right или Right template)
Шаблон прав, ничего конкретно не защищающий. По структуре совпадает с SD. Его можно включать в другие шаблоны или в SD, и тогда права, определённые в нём, распространяются на то, куда он включён.
IR (Inline right)
«Базовая единица» прав — «одно право». Имеет две характеристики:
- кому выдано — это набор пользователей и/или набору групп (не вики-групп, а HaloACL-групп).
- что выдано — набор прав.
Доступны следующие права: чтение, запись, удаление, переименование, создание новых статей, (только в IntraACL) изменение прав статьи. В оригинальном HaloACL также выделяются права на: добавление семантических аннотаций, редактирование через форму, редактирование через WYSIWYG-редактор. В IntraACL эти 3 права приравнены к праву редактирования (ну что за бред — разрешать править статью через WYSIWYG, но не разрешать просто) и ликвидированы.