• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/control/task.php
  • Класс: BitrixTasksControlTask
  • Вызов: Task::addFilesRights
private function addFilesRights($filesIds)
{
	$filesIds = array_unique(array_filter($filesIds));

	// Nothing to do?
	if (empty($filesIds))
		return;

	if(
		!Loader::includeModule('webdav')
		|| !Loader::includeModule('iblock')
	)
	{
		return;
	}

	$arRightsTasks = CWebDavIblock::GetTasks();

	$task = $this->getTask();
	$task->fillMemberList();

	$memberList = $task->getMemberList();

	$members = [
		$task->getCreatedBy(),
		$task->getResponsibleId(),
	];
	foreach ($memberList as $member)
	{
		$members[] = $member->getUserId();
	}
	$members = array_unique($members);

	$ibe = new CIBlockElement();
	$dbWDFile = $ibe->GetList(
		[],
		[
			'ID' => $filesIds,
			'SHOW_NEW' => 'Y'
		],
		false,
		false,
		['ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW']
	);

	if (!$dbWDFile)
	{
		return;
	}

	$i = 0;
	$arRightsForTaskMembers = array();
	foreach ($members as $userId)
	{
		// For intranet users and their managers
		$arRightsForTaskMembers['n' . $i++] = [
			'GROUP_CODE' => 'IU' . $userId,
			'TASK_ID'    => $arRightsTasks['R']		// rights for reading
		];

		// For extranet users
		$arRightsForTaskMembers['n' . $i++] = [
			'GROUP_CODE' => 'U' . $userId,
			'TASK_ID'    => $arRightsTasks['R']		// rights for reading
		];
	}
	$iNext = $i;

	while ($arWDFile = $dbWDFile->Fetch())
	{
		if (!$arWDFile['IBLOCK_ID'])
		{
			continue;
		}

		$fileId = $arWDFile['ID'];

		if (!CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E")
		{
			continue;
		}
		$ibRights = new CIBlockElementRights($arWDFile['IBLOCK_ID'], $fileId);
		$arCurRightsRaw = $ibRights->getRights();

		// Preserve existing rights
		$i = $iNext;
		$arRights = $arRightsForTaskMembers;
		foreach ($arCurRightsRaw as $arRightsData)
		{
			$arRights['n' . $i++] = [
				'GROUP_CODE' => $arRightsData['GROUP_CODE'],
				'TASK_ID'    => $arRightsData['TASK_ID']
			];
		}

		$ibRights->setRights($arRights);
	}
}