- Модуль: webdav
- Путь к файлу: ~/bitrix/modules/webdav/classes/iblocksocnet.php
- Класс: CIBlockWebdavSocnet
- Вызов: CIBlockWebdavSocnet::UserERights
static function UserERights($iblockID)
{
if (CIBlock::GetArrayByID($iblockID, "RIGHTS_MODE") === "E")
{
return;
}
$arUsers = self::GetUsers($iblockID);
foreach ($arUsers as $userID => $user)
{
foreach (self::$ops as $op => $opTrans)
$arUsers[$userID]["Operations"][$op] = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $userID, 'files', $op);
}
$arTasks = CWebDavIblock::GetTasks();
// set e rights
$arFields = array(
'RIGHTS_MODE' => 'E',
'GROUP_ID' => array()
);
$ib = new CIBlock();
$res = $ib->Update($iblockID, $arFields);
$ibr = new CIBlockRights($iblockID);
$rights = array();
$rights['n0'] = array('GROUP_CODE' => 'G1', 'DO_CLEAN' => 'Y', 'TASK_ID' => $arTasks['X']); // admins
$rights['n1'] = array('GROUP_CODE' => 'G2', 'DO_CLEAN' => 'Y', 'TASK_ID' => $arTasks['D']); // nobody
$ibr->SetRights($rights);
foreach ($arUsers as $userID => $user)
{
$sectionID = intval($user['SECTION']);
$ibrs = new CIBlockSectionRights($iblockID, $sectionID);
$arRights = array();
$arRights['n0'] = array('GROUP_CODE' => "U".$userID, 'TASK_ID' => $arTasks['X']); // owner - full access, nobody - denied (inherited)
//$ibrs->SetRights($rights);
// get old permissions
$rights = array();
foreach($user["Operations"] as $op => $subj)
{
if ($subj)
{
if ($subj == 'A') $subj = 'G2';
elseif ($subj == 'C') $subj = 'AU';
elseif ($subj == 'Z') continue; // already set
$rights[$subj] = $arTasks[self::$ops[$op]];
if (self::$ops[$op] == 'E')
$rights['CR'] = $arTasks['W'];
}
}
$i = 1;
foreach($rights as $subj => $task)
{
$arRights['n'.$i++] = array(
'GROUP_CODE' => $subj,
'TASK_ID' => $task,
'DO_CLEAN' => 'NOT'
);
}
// apply to exist files
$arFilter = array(
"IBLOCK_ID" => $iblockID,
"ID" => $sectionID,
//"SECTION_ID" => $sectionID,
"CHECK_PERMISSIONS" => "N"
);
$dbSection = CIBlockSection::GetList(array(), $arFilter, false, array('ID'));
while ($arSection = $dbSection->Fetch())
{
$ibrs = new CIBlockSectionRights($iblockID, $arSection['ID']);
$ibrs->SetRights($arRights);
self::CreateSharedFolder($iblockID, $sectionID, $userID, true);
}
//$dbElements = CIBlockElement::GetList(array(), $arFilter, false, false, array('ID'));
//while ($arElement = $dbElements->Fetch())
//{
//$ibre = new CIBlockElementRights($iblockID, $arElement['ID']);
//$ibre->SetRights($arRights);
//}
}
}