parser

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

 

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

Ответ

G100m 19.10.2005 14:38

Конечно есть. Можно забыть о хранении ACL в памяти:
	SELECT
		node.node_id,
		node.parent_id,
		node.irf,
		node.owner,
		BIT_OR(acl.rights) as rights
	FROM
		node
	LEFT JOIN	
		acl
	ON
		node.node_id = acl.node_id
		AND
		acl.auser_id IN (^pAUTH.user.groups.menu{$pAUTH.user.groups.group_id,}$pAUTH.user.user_id)

	WHERE
		node.thread_id = 1
	GROUP BY
		node.node_id
Достанет целиком первую ветку с наполовну расчитанными правами.
Если используете не mySQL или версию >= 5.0, то можно написать простенькую хранимую процедуру, которая дудет приплюсовывать результат наследования.
Еще можно посадить travescal и доставать только НУЖНЫЕ вам оси дерева.
Кстати, эта модель в обсужениях на sql.ru признана наиболее работоспособной в системах с больши количеством пользователей и объектов.