| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 26.10.2003 15:00
этот метод занимается тупейшей вешью - битовой арифметикой и не более того. и читать про engine было совершенно не обязательно.^rem{ *** достаем данные о текущем документе *** }
$current_object[^MAIN:pSQL.sql[table]{
SELECT
page_id AS id,
parent_id,
thread_id,
irf,
...
FROM
page
WHERE
path = '$request:uri'
}]
^rem{ *** достаем данные о текущем треде *** }
$thread[^MAIN:pSQL.sql[table]{
SELECT
page_id AS id,
parent_id,
irf,
...
FROM
page
WHERE
thread_id = $current_object.thread_id
}]
^rem{ *** $auth_data - объект класса auth *** }
^rem{ *** достаем назначения прав текущему пользователю на все объекты треда *** }
$acl[^auth_data.getFullACL[$thread]]
^rem{ *** определяем права авторизированного пользователя на объект *** }
$effective_right(^auth_data.getRightsToObject[$current_object;$thread;$acl])
^rem{ *** все, права текущего пользователя на $current_object у нас посчитаны, можно юзать *** }
^rem{ *** при прочтении слова "юзать" egr идет пить валерьянку :) *** }предварительно определяем для себя: какой бит у нас отвечает за какое право на объект, например так:^if($effective_right & ($supervisory + $read)){
посетиль имеет права смотреть объект, показываем ему что-то
}{
прав нету, посылаем его подальше. как именно - зависит от вас.
}естественно, лучше создать методы типа @is_read[], @is_write[] в которые вынести конструкции вида $effective_right & ($supervisory + $read)