- Модуль: 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;
}