<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>WackoWiki - YuriMakarov/ПраваДоступа/Группы</title>
<link>http://wackowiki.com/YuriMakarov/ПраваДоступа/Группы</link>
<description>History/revisions of WackoWiki/YuriMakarov/ПраваДоступа/Группы</description>
<language>en-us</language>
<copyright>noindex</copyright>
<item>
<title>2003-07-24 17:46:18</title>
<link>http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy/show?time=2003-07-24+17%3A46%3A18</link>
<description>&lt;div class="pageBefore">&lt;img src="http://wackowiki.com/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".yurimakarov.pravadostupa.gruppy" href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy" class="">/Yuri&amp;nbsp;Makarov&amp;nbsp;/&amp;nbsp;Права&amp;nbsp;Доступа&amp;nbsp;/&amp;nbsp;Группы&lt;/a> за &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A46%3A18">2003-07-24 17:46:18&lt;/a> и &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy">2003-07-24 18:07:37&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li>&lt;ul>&lt;li> Возможно было бы&amp;nbsp;полезно именть несколько @Page в&amp;nbsp;одном списке доступа?&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2003-07-24 17:42:18</title>
<link>http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy/show?time=2003-07-24+17%3A42%3A18</link>
<description>&lt;div class="pageBefore">&lt;img src="http://wackowiki.com/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy" class="">/Yuri&amp;nbsp;Makarov&amp;nbsp;/&amp;nbsp;Права&amp;nbsp;Доступа&amp;nbsp;/&amp;nbsp;Группы&lt;/a> за &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A42%3A18">2003-07-24 17:42:18&lt;/a> и &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A46%3A18">2003-07-24 17:46:18&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> Вариант @Page/Subpage не&amp;nbsp;работает из-за некорректной отработки (где-то в&amp;nbsp;системе) слэша. Найти и&amp;nbsp;исправить пока не&amp;nbsp;смог. Возможно разработчики подскажут/поправят.&lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> Вариант @&lt;span class="missingpage">Page&amp;nbsp;/&amp;nbsp;Subpage&lt;/span>&lt;a href="http://wackowiki.com/Page/Subpage/edit?add=1" title="Создать эту страницу">?&lt;/a> не&amp;nbsp;работает из-за некорректной отработки (где-то в&amp;nbsp;системе) слэша. Найти и&amp;nbsp;исправить пока не&amp;nbsp;смог. Возможно разработчики подскажут/поправят.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2003-07-24 17:40:20</title>
<link>http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy/show?time=2003-07-24+17%3A40%3A20</link>
<description>&lt;div class="pageBefore">&lt;img src="http://wackowiki.com/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy" class="">/Yuri&amp;nbsp;Makarov&amp;nbsp;/&amp;nbsp;Права&amp;nbsp;Доступа&amp;nbsp;/&amp;nbsp;Группы&lt;/a> за &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A40%3A20">2003-07-24 17:40:20&lt;/a> и &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A42%3A18">2003-07-24 17:42:18&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> В&amp;nbsp;настоящее время отрицание не&amp;nbsp;работает.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2003-07-24 17:34:03</title>
<link>http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy/show?time=2003-07-24+17%3A34%3A03</link>
<description>&lt;div class="pageBefore">&lt;img src="http://wackowiki.com/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy" class="">/Yuri&amp;nbsp;Makarov&amp;nbsp;/&amp;nbsp;Права&amp;nbsp;Доступа&amp;nbsp;/&amp;nbsp;Группы&lt;/a> за &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A34%3A03">2003-07-24 17:34:03&lt;/a> и &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A40%3A20">2003-07-24 17:40:20&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;strong>Особенности списков доступа&lt;/strong>&lt;br />
&lt;ul>&lt;li> Варианты * $ @ и&amp;nbsp;их отрицания могут быть в&amp;nbsp;списке доступа только в&amp;nbsp;одном экземпляре и&amp;nbsp;только в&amp;nbsp;конце списка. Все&amp;nbsp;что находится после них&amp;nbsp;игнорируется.&lt;/li>&lt;/ul>
&lt;strong>Тестирование&lt;/strong>&lt;br />
&lt;ul>&lt;li> Работа этой фичи была проверена только для&amp;nbsp;варианта @Page
&lt;/li>&lt;li> Вариант !@Page не&amp;nbsp;работает из-за бага в&amp;nbsp;системе
&lt;/li>&lt;li> Вариант @&lt;span class="missingpage">Page&amp;nbsp;/&amp;nbsp;Subpage&lt;/span>&lt;a href="http://wackowiki.com/Page/Subpage/edit?add=1" title="Создать эту страницу">?&lt;/a> не&amp;nbsp;работает из-за некорректной отработки (где-то в&amp;nbsp;системе) слэша. Найти и&amp;nbsp;исправить пока не&amp;nbsp;смог. Возможно разработчики подскажут/поправят.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2003-07-24 17:32:51</title>
<link>http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy/show?time=2003-07-24+17%3A32%3A51</link>
<description>&lt;div class="pageBefore">&lt;img src="http://wackowiki.com/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy" class="">/Yuri&amp;nbsp;Makarov&amp;nbsp;/&amp;nbsp;Права&amp;nbsp;Доступа&amp;nbsp;/&amp;nbsp;Группы&lt;/a> за &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A32%3A51">2003-07-24 17:32:51&lt;/a> и &lt;a href="http://wackowiki.com/YuriMakarov/PravaDostupa/Gruppy?time=2003-07-24+17%3A34%3A03">2003-07-24 17:34:03&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5322-1">&lt;/a>&lt;h1>Поддержка групп пользователей&lt;/h1>
В&amp;nbsp;системе отсутствуют возможности создания Групп пользователей для&amp;nbsp;разграничения полномочий. Это&amp;nbsp;очень неудобно в&amp;nbsp;работе, когда есть потребность в&amp;nbsp;таком разграничении. При&amp;nbsp;желании изменить полномочия на&amp;nbsp;группу страниц (необязательно кластер) приходится все&amp;nbsp;в&amp;nbsp;ручную править. То&amp;nbsp;же самое при&amp;nbsp;появлении нового пользователя с&amp;nbsp;некоторым набором полномочий.&lt;br />
&lt;strong>Эту задачку можно очень просто решить.&lt;/strong>&lt;br />
Достаточно ввести в&amp;nbsp;ACL еще&amp;nbsp;один тип&amp;nbsp;пользователя (в дополнение к&amp;nbsp;* и $),&lt;br />
это&amp;nbsp;ссылка на&amp;nbsp;конкретную страницу. Она&amp;nbsp;означает &amp;laquo;Взять права доступа со&amp;nbsp;страницы&amp;raquo;.&lt;br />
Примеры:&lt;br />
&lt;ul>&lt;li> Чтение: @&lt;a name="yurimakarov" href="http://wackowiki.com/YuriMakarov" class="">Yuri&amp;nbsp;Makarov&lt;/a> &amp;ndash; разрешить читать пользователям читающим &lt;a  href="http://wackowiki.com/YuriMakarov" class="">Yuri&amp;nbsp;Makarov&lt;/a>.
&lt;/li>&lt;li> Редакт: @ACL/Редакторы &amp;ndash; редактируют только из&amp;nbsp;списка редакторов.
&lt;/li>&lt;li> Чтение: @&lt;span class="missingpage">Yuri&amp;nbsp;Makarov&amp;nbsp;/&amp;nbsp;My&amp;nbsp;Club&amp;nbsp;/&amp;nbsp;Members&lt;/span>&lt;a href="http://wackowiki.com/YuriMakarov/MyClub/Members/edit?add=1" title="Создать эту страницу">?&lt;/a> &amp;ndash; чтение только членам моего клуба.
&lt;/li>&lt;li> Чтение: @&lt;span class="missingpage">Project&amp;nbsp;1&amp;nbsp;/&amp;nbsp;Members&lt;/span>&lt;a href="http://wackowiki.com/Project1/Members/edit?add=1" title="Создать эту страницу">?&lt;/a> &amp;ndash; чтение только учасникам проекта &lt;span class="missingpage">Project&amp;nbsp;1&lt;/span>&lt;a href="http://wackowiki.com/Project1/edit?add=1" title="Создать эту страницу">?&lt;/a>.
&lt;/li>&lt;li> Чтение: !@&lt;span class="missingpage">Black&amp;nbsp;List&lt;/span>&lt;a href="http://wackowiki.com/BlackList/edit?add=1" title="Создать эту страницу">?&lt;/a> &amp;ndash; запрет на&amp;nbsp;чтение пользователям внесенным на&amp;nbsp;страницу &lt;span class="missingpage">Black&amp;nbsp;List&lt;/span>&lt;a href="http://wackowiki.com/BlackList/edit?add=1" title="Создать эту страницу">?&lt;/a>.&lt;/li>&lt;/ul>
&lt;strong>Достоинства этого метода&lt;/strong>&lt;br />
&lt;ul>&lt;li> Простота реализации &amp;ndash; подправить код&amp;nbsp;только в&amp;nbsp;месте проверки полномочий (сделать сборку полномочий рекурсивной, это&amp;nbsp;наверное несколько строчек добавить). Все&amp;nbsp;остальное &amp;ndash; заведение/редактирование списков доступа (групп пользователей), описание списков доступа, ограничения доступа к&amp;nbsp;ним и&amp;nbsp;их редактированию &amp;ndash; все&amp;nbsp;это делается уже&amp;nbsp;имеющимися стандартными средствами.
&lt;/li>&lt;li> Возможность создания произвольных групп доступа в&amp;nbsp;любое время через веб-интерфейс.
&lt;/li>&lt;li> Возможность создания групп доступа любым пользователем системы (для своих нужд к&amp;nbsp;примеру).
&lt;/li>&lt;li> Возможность маскировки групп доступа. Если не&amp;nbsp;дать кому-то прав на&amp;nbsp;чтение страницы с&amp;nbsp;описанием группы доступа, то&amp;nbsp;он может даже не&amp;nbsp;подозревать о&amp;nbsp;ее существовании. 
&lt;/li>&lt;li> Возможность изменения прав пользователя сразу на&amp;nbsp;большую группу страниц, скажем добавив или&amp;nbsp;убрав пользователя из&amp;nbsp;&lt;span class="missingpage">My&amp;nbsp;Club&amp;nbsp;/&amp;nbsp;Members&lt;/span>&lt;a href="http://wackowiki.com/MyClub/Members/edit?add=1" title="Создать эту страницу">?&lt;/a> я&amp;nbsp;разрешаю/запрещаю ему&amp;nbsp;доступ ко&amp;nbsp;все моим закрытым страницам.
&lt;/li>&lt;li> Возможность изменения поступа ко&amp;nbsp;всем страницам кластера (и не&amp;nbsp;только) из&amp;nbsp;одного места, с&amp;nbsp;сохранением возможности индивидуальной настройки доступа к&amp;nbsp;отдельным страницам кластера. Для&amp;nbsp;этого достаточно в&amp;nbsp;поле доступа страницы (к примеру &lt;span class="missingpage">Кластер&amp;nbsp;1&amp;nbsp;/&amp;nbsp;Стр&amp;nbsp;11&lt;/span>&lt;a href="http://wackowiki.com/Кластер1/Стр11/edit?add=1" title="Создать эту страницу">?&lt;/a>) поставить ссылку на&amp;nbsp;главную страницу кластера (&lt;span class="missingpage">Кластер&amp;nbsp;1&lt;/span>&lt;a href="http://wackowiki.com/Кластер1/edit?add=1" title="Создать эту страницу">?&lt;/a>) или&amp;nbsp;на&amp;nbsp;отдельную страницу с&amp;nbsp;описанием группы доступа к&amp;nbsp;кластеру (&lt;span class="missingpage">Кластер&amp;nbsp;1&amp;nbsp;/&amp;nbsp;Members&lt;/span>&lt;a href="http://wackowiki.com/Кластер1/Members/edit?add=1" title="Создать эту страницу">?&lt;/a>)&lt;/li>&lt;/ul>
Тут&amp;nbsp;еще много примеров придумать можно.&lt;br />
Этот метод управления полномочиями исключительно гибкий.&lt;br />
&lt;strong>Реализация&lt;/strong>&lt;br />
В&amp;nbsp;главном &lt;strong>wakka.php&lt;/strong> нужно поправить функцию HasAccess&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">function&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">HasAccess&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$privilege&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tag&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">""&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$user&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">""&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tested&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;array())&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;(Mak)&amp;nbsp;добавлен&amp;nbsp;параметр&amp;nbsp;$tested&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;see&amp;nbsp;whether&amp;nbsp;user&amp;nbsp;is&amp;nbsp;registered&amp;nbsp;and&amp;nbsp;logged&amp;nbsp;in&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$user&lt;/span>&lt;span style="color: #007700">!=&lt;/span>&lt;span style="color: #DD0000">"guest@wacko"&lt;/span>&lt;span style="color: #007700">)&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$user&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">GetUser&lt;/span>&lt;span style="color: #007700">())&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$registered&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">true&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;set&amp;nbsp;defaults&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">if&amp;nbsp;(!&lt;/span>&lt;span style="color: #0000BB">$user&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">GetUserName&lt;/span>&lt;span style="color: #007700">());&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!&lt;/span>&lt;span style="color: #0000BB">$tag&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">trim&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$tag&lt;/span>&lt;span style="color: #007700">))&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tag&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">GetPageTag&lt;/span>&lt;span style="color: #007700">();&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">in_array&amp;nbsp;&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$tag&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tested&lt;/span>&lt;span style="color: #007700">))&amp;nbsp;return&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">false&lt;/span>&lt;span style="color: #007700">;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;(Mak)&amp;nbsp;Тест&amp;nbsp;на&amp;nbsp;зацикливание&amp;nbsp;ссылок&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;load&amp;nbsp;acl&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$acl&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">LoadAcl&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$tag&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$privilege&lt;/span>&lt;span style="color: #007700">);&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$acl&lt;/span>&lt;span style="color: #007700">[&lt;/span>&lt;span style="color: #DD0000">'list'&lt;/span>&lt;span style="color: #007700">]&amp;nbsp;=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">ReplaceAliases&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$acl&lt;/span>&lt;span style="color: #007700">[&lt;/span>&lt;span style="color: #DD0000">'list'&lt;/span>&lt;span style="color: #007700">]);&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">_acl&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$acl&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;if&amp;nbsp;current&amp;nbsp;user&amp;nbsp;is&amp;nbsp;owner,&amp;nbsp;return&amp;nbsp;true.&amp;nbsp;owner&amp;nbsp;can&amp;nbsp;do&amp;nbsp;anything!&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$user&lt;/span>&lt;span style="color: #007700">!=&lt;/span>&lt;span style="color: #DD0000">"guest@wacko"&lt;/span>&lt;span style="color: #007700">)&amp;nbsp;if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">UserIsOwner&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$tag&lt;/span>&lt;span style="color: #007700">))&amp;nbsp;return&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">true&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;fine&amp;nbsp;fine...&amp;nbsp;now&amp;nbsp;go&amp;nbsp;through&amp;nbsp;acl&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">foreach&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">explode&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">"\n"&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$acl&lt;/span>&lt;span style="color: #007700">[&lt;/span>&lt;span style="color: #DD0000">"list"&lt;/span>&lt;span style="color: #007700">])&amp;nbsp;as&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$line&lt;/span>&lt;span style="color: #007700">)&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$line&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">trim&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$line&lt;/span>&lt;span style="color: #007700">);&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;check&amp;nbsp;for&amp;nbsp;inversion&amp;nbsp;character&amp;nbsp;"!"&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">preg_match&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">"/^[!](.*)$/"&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$line&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$matches&lt;/span>&lt;span style="color: #007700">))&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$negate&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">1&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$line&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$matches&lt;/span>&lt;span style="color: #007700">[&lt;/span>&lt;span style="color: #0000BB">1&lt;/span>&lt;span style="color: #007700">];&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$negate&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">0&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;if&amp;nbsp;there's&amp;nbsp;still&amp;nbsp;anything&amp;nbsp;left...&amp;nbsp;lines&amp;nbsp;with&amp;nbsp;just&amp;nbsp;a&amp;nbsp;"!"&amp;nbsp;don't&amp;nbsp;count!&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$line&lt;/span>&lt;span style="color: #007700">)&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$line&lt;/span>&lt;span style="color: #007700">[&lt;/span>&lt;span style="color: #0000BB">0&lt;/span>&lt;span style="color: #007700">])&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;comments&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">case&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">"#"&lt;/span>&lt;span style="color: #007700">:&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;everyone&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">case&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">"*"&lt;/span>&lt;span style="color: #007700">:&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;!&lt;/span>&lt;span style="color: #0000BB">$negate&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;only&amp;nbsp;registered&amp;nbsp;users&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">case&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">"$"&lt;/span>&lt;span style="color: #007700">:&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">"§"&lt;/span>&lt;span style="color: #007700">:&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$registered&lt;/span>&lt;span style="color: #007700">)&amp;nbsp;?&amp;nbsp;!&lt;/span>&lt;span style="color: #0000BB">$negate&amp;nbsp;&lt;/span>&lt;span style="color: #007700">:&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">false&lt;/span>&lt;span style="color: #007700">;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;&amp;lt;-&amp;nbsp;unregistered&amp;nbsp;always&amp;nbsp;False&amp;nbsp;(Mak)&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;(Mak)&amp;nbsp;Приверка&amp;nbsp;группы&amp;nbsp;доступа&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">case&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">"@"&lt;/span>&lt;span style="color: #007700">:&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tested&lt;/span>&lt;span style="color: #007700">[]&amp;nbsp;=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tag&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$groupe_access&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">HasAccess&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$privilege&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">substr&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$line&lt;/span>&lt;span style="color: #007700">,&lt;/span>&lt;span style="color: #0000BB">1&lt;/span>&lt;span style="color: #007700">),&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$user&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$tested&lt;/span>&lt;span style="color: #007700">);&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$groupe_access&lt;/span>&lt;span style="color: #007700">)&amp;nbsp;?&amp;nbsp;!&lt;/span>&lt;span style="color: #0000BB">$negate&amp;nbsp;&lt;/span>&lt;span style="color: #007700">:&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$negate&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;aha!&amp;nbsp;a&amp;nbsp;user&amp;nbsp;entry.&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">default:&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span>&lt;span style="color: #0000BB">$line&amp;nbsp;&lt;/span>&lt;span style="color: #007700">==&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$user&lt;/span>&lt;span style="color: #007700">)&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;!&lt;/span>&lt;span style="color: #0000BB">$negate&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//&amp;nbsp;tough&amp;nbsp;luck.&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">return&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">false&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;}&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;ul>&lt;li> В&amp;nbsp;функцию добавлен еще&amp;nbsp;один параметр $tested = array() для&amp;nbsp;контроля зацикливания ссылок.
&lt;/li>&lt;li> При&amp;nbsp;рекурсивном вызове HasAccess в&amp;nbsp;этот параметр добавляется tag&amp;nbsp;текущей проверяемой страницы.
&lt;/li>&lt;li> В&amp;nbsp;начале функции проверяется наличие tag&amp;nbsp;в&amp;nbsp;уже протестированных страницах и&amp;nbsp;если она&amp;nbsp;там есть, возвращается False.&lt;br />
if&amp;nbsp;(in_array ($tag, $tested)) return false;
&lt;/li>&lt;li> В&amp;nbsp;цикле анализа элементов списка доступа добавлена обработка варианта @Page.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
