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