parser

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

 

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

Ответ

Misha v.3 01.10.2007 21:02

моё мнение: кешировать данные из SQL в xml не надо. разгрузив SQL сервер (который уже только и занят только тем что сидит и ждёт когда у него что-то спросят) вы создаёте жирный xdoc + имеете описанные у вас проблемы поиска пересечений.

я тут недавно к своему старому классу авторизации (на доделывание нового времени так и не появилось) подобное приделывал (чтобы можно было давать права на _разные_ структуры). дописал пару классов, котоые за это отвечают.

пришлось переделать таблички rights и acl, да часть методов в auth.p болтается мёртвым грузом (в принципе смело можно грохнуть, если они не используются). могу выложить рядом, однако писать демонстрационные файлики нет никакого желания.

используется в таком виде:
1. перекрывается метод @logon[], в него добавляется вызов:
^self.initACL[]
2. дообавляем в класс метод @initACL[]
@initACL[]
^if($is_logon){
	^self.loadUserGroups[]
	^use[ACL.p]
	$oACL[^ACL::create[
		$.oSql[$oSql]
	]]
}
$result[]
#end @initACL[]
3. добавляем в класс примерно такой метод:
@isHaveAccess[sAccessAbbr;sRefererType;iRefererId]
^if($is_logon){
	$result(def $oACL && ^oACL.isHaveRight[$sAccessAbbr;^oACL.getRightsToItem[$user;$sRefererType;$.id($iRefererId)]])
}{
	$result(false)
}
#end @isHaveAccess[]
4. где надо проверяем:
^if(^oAuth.isHaveAccess[R;tree;666]){
	<p>User have 'read' access to object in tree with id=666.</p>
}{
	<p>Access denied.</p>
}
P.S. правда пришлось ещё малость изменить сам auth.p, однако там вроде с текущей выложенной версией нет обратно несовместимых изменений, поэтому тоже могу обновить...