• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/rightsmanager.php
  • Класс: BitrixDiskSimpleRightBuilder
  • Вызов: SimpleRightBuilder::deleteSimpleRightFromSubTree
private function deleteSimpleRightFromSubTree($objectId, $accessCode)
{
	//need to delete simple rights from descendants
	$objectIds = $this->getConflictRightsInSubTree($objectId, $accessCode);

	$objectId = (int)$objectId;
	$accessCode = $this->sqlHelper->forSql($accessCode);

	if(!$objectIds)
	{
		//we have to destroy simple right from all descendants and from current OBJECT_ID
		$this->connection->queryExecute("
			DELETE simple FROM b_disk_simple_right simple
				INNER JOIN b_disk_object_path p ON p.OBJECT_ID = simple.OBJECT_ID
			WHERE p.PARENT_ID = {$objectId} AND simple.ACCESS_CODE = '{$accessCode}'
		");
	}
	else
	{
		//we have to destroy simple right from all descendants and from current OBJECT_ID without nodes with conflict rights in path.
		$this->connection->queryExecute("
			DELETE simple FROM b_disk_simple_right simple
				INNER JOIN b_disk_object_path p ON p.OBJECT_ID = simple.OBJECT_ID
			WHERE
				p.PARENT_ID = {$objectId} AND simple.ACCESS_CODE = '{$accessCode}' AND
				NOT EXISTS(
					SELECT 'x' FROM b_disk_object_path pp
						WHERE pp.OBJECT_ID = p.OBJECT_ID AND
						pp.PARENT_ID IN (" . implode(',', $objectIds)  . ") )
		");
	}
}