• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/rightsmanager.php
  • Класс: BitrixDiskRightsManager
  • Вызов: RightsManager::appendChildAuRightsForChildren
private function appendChildAuRightsForChildren($parentId, $userId, array $restrictIds, &$rightsByObjectId)
{
	$restrictById = '';
	$restrictIds = array_filter(array_map('intval', $restrictIds));
	if ($restrictIds)
	{
		$restrictById = ' AND o.ID IN (' . implode(',', $restrictIds) . ')';
	}

	$query = Application::getConnection()->query("
		SELECT op.NAME, r.TASK_ID, r.DOMAIN, r.NEGATIVE, o.REAL_OBJECT_ID O_REAL_OBJECT_ID, o.ID O_OBJECT_ID
		FROM b_disk_right r
			INNER JOIN b_disk_object_path p ON p.PARENT_ID = r.OBJECT_ID
			INNER JOIN b_disk_object o ON p.OBJECT_ID = o.ID
			INNER JOIN b_task_operation task_op ON r.TASK_ID = task_op.TASK_ID
			INNER JOIN b_operation op ON task_op.OPERATION_ID = op.ID

		WHERE o.PARENT_ID = {$parentId} AND r.ACCESS_CODE = 'AU' {$restrictById}
	"
	);

	while ($row = $query->fetch())
	{
		$rightsByObjectId[$row['O_OBJECT_ID']][] = array(
			'ACCESS_CODE' => 'AU',
			'NAME' => $row['NAME'],
			'TASK_ID' => $row['TASK_ID'],
			'DOMAIN' => $row['DOMAIN'],
			'NEGATIVE' => $row['NEGATIVE'],
			'REAL_OBJECT_ID' => $row['O_REAL_OBJECT_ID'],
			'OBJECT_ID' => $row['O_OBJECT_ID'],
		);

		if ($row['O_REAL_OBJECT_ID'] != $row['O_OBJECT_ID'])
		{
			$rightsByObjectId[$row['O_REAL_OBJECT_ID']][] = array(
				'ACCESS_CODE' => 'AU',
				'NAME' => $row['NAME'],
				'TASK_ID' => $row['TASK_ID'],
				'DOMAIN' => $row['DOMAIN'],
				'NEGATIVE' => $row['NEGATIVE'],
				'REAL_OBJECT_ID' => $row['O_REAL_OBJECT_ID'],
				'OBJECT_ID' => $row['O_OBJECT_ID'],
			);
		}
	}
}