• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/calendarhandler.php
  • Класс: CDavCalendarHandler
  • Вызов: CDavCalendarHandler::CheckPrivileges
public function CheckPrivileges($testPrivileges, $principal, $calendarId)
	{
		if (is_object($principal) && ($principal instanceof CDavPrincipal))
			$principal = $principal->Id();

		if (!is_numeric($principal))
			return false;

		$principal = intval($principal);
		$calendarIdNorm = implode("-", $calendarId);

		static $arCalendarPrivilegesCache = array();

		if (!isset($arCalendarPrivilegesCache[$calendarIdNorm][$principal]))
		{
			$arPriv = array();

			$arPrivOrig = CEventCalendar::GetUserPermissionsForCalendar($calendarId, $principal);
			// $arPrivOrig = array('bAccess' => true/false, 'bReadOnly' => true/false, 'privateStatus' => 'time'/'title');
			if ($arPrivOrig['bAccess'])
			{
				$arPriv[] = 'urn:ietf:params:xml:ns:caldav:read-free-busy';
				if (!isset($arPrivOrig['privateStatus']) || $arPrivOrig['privateStatus'] != 'time')
					$arPriv[] = 'DAV::read';

				if (!$arPrivOrig['bReadOnly'])
				{
					$arPriv[] = 'DAV:write';
					$arPriv[] = 'DAV:bind';
					$arPriv[] = 'DAV:unbind';
					$arPriv[] = 'DAV:write-properties';
					$arPriv[] = 'DAV:write-content';
				}
			}

			$arCalendarPrivilegesCache[$calendarIdNorm][$principal] = CDav::PackPrivileges($arPriv);
		}

		$testPrivilegesBits = CDav::PackPrivileges($testPrivileges);

		return ($arCalendarPrivilegesCache[$calendarIdNorm][$principal] & $testPrivilegesBits) > 0;
	}