Новости | 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)