• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/tools.php
  • Класс: CWebDavTools
  • Вызов: CWebDavTools::appendRights
static function appendRights(CIBlockRights $ibRights, array $appendRights, array $tasks)
{
	$taskIdToLetter = array_flip($tasks);
	$letterToTaskId = $tasks;
	$newRights = array();
	$existsRights = $ibRights->GetRights();

	$appendRightsGroupCode = array();
	foreach ($appendRights as $k => $right)
	{
		$appendRightsGroupCode[$right['GROUP_CODE']] = $k;
	}
	unset($right);

	$i = 0;
	foreach ($existsRights as $existsRight)
	{
		//if exists right not in appendRights and not inherited. We save this specified right
		if(empty($appendRightsGroupCode[$existsRight['GROUP_CODE']]) && $existsRight['IS_INHERITED'] != 'Y')
		{
			$newRights[] = array(
				'GROUP_CODE' => $existsRight['GROUP_CODE'],
				'TASK_ID' => $existsRight['TASK_ID'],
			);
			continue;
		}
		//if exists right is inherited and not in appendRights
		elseif($existsRight['IS_INHERITED'] == 'Y' && empty($appendRightsGroupCode[$existsRight['GROUP_CODE']]))
		{
			continue;
		}
		else
		{
			//attempt to rewrite this rule
			$keyOfAppendRight = $appendRightsGroupCode[$existsRight['GROUP_CODE']];
			//if new right > exists right
			if($taskIdToLetter[$appendRights[$keyOfAppendRight]['TASK_ID']] > $taskIdToLetter[$existsRight['TASK_ID']])
			{
				$newRights[] = array(
					'GROUP_CODE' => $existsRight['GROUP_CODE'],
					'TASK_ID' => $appendRights[$keyOfAppendRight]['TASK_ID'],
				);
			}
			//if exists right is not inherited and not in appendRights
			elseif($existsRight['IS_INHERITED'] != 'Y')
			{
				$newRights[] = array(
					'GROUP_CODE' => $existsRight['GROUP_CODE'],
					'TASK_ID' => $existsRight['TASK_ID'],
				);
			}
			unset($appendRights[$keyOfAppendRight]);
		}
	}
	unset($existsRight);

	$newRights = array_merge($newRights, $appendRights);

	$returnRights = array();
	$i = 0;
	foreach ($newRights as $right)
	{
		$returnRights['n' . $i++] = $right;
	}
	unset($right);

	return $returnRights;
}