parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

про метод getRightsToObject...

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 идет пить валерьянку :) *** }
предварительно определяем для себя: какой бит у нас отвечает за какое право на объект, например так:
1 - supervisory (может все)
2 - read (может смотреть)
4 - write (может изменять)
8 - delete (может удалять)
^if($effective_right & ($supervisory + $read)){
  посетиль имеет права смотреть объект, показываем ему что-то
}{
  прав нету, посылаем его подальше. как именно - зависит от вас.
}
естественно, лучше создать методы типа @is_read[], @is_write[] в которые вынести конструкции вида $effective_right & ($supervisory + $read)