• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/access.php
  • Класс: CAccess
  • Вызов: CAccess::UpdateCodes
public function UpdateCodes($arParams = false)
{
	global $USER;

	$USER_ID = 0;
	if (is_array($arParams) && isset($arParams["USER_ID"]))
	{
		$USER_ID = intval($arParams["USER_ID"]);
	}
	elseif (is_object($USER) && $USER->IsAuthorized())
	{
		$USER_ID = intval($USER->GetID());
	}

	if ($USER_ID > 0)
	{
		$connection = BitrixMainApplication::getConnection();
		$lockName = "update_codes.{$USER_ID}";

		if ($connection->lock($lockName))
		{
			$clearCache = false;
			$now = new DateTime();

			foreach (static::$arAuthProviders as $providerId => $providerDescription)
			{
				/** @var CGroupAuthProvider $provider For example */
				$provider = new $providerDescription["CLASS"];

				if (is_callable([$provider, "UpdateCodes"]))
				{
					//do we need to recalculate codes for the user?
					if (static::NeedToRecalculate($providerId, $USER_ID, $now))
					{
						$connection->startTransaction();

						//should clear codes cache for the user
						$clearCache = true;

						//remove old codes
						static::DeleteCodes($providerId, $USER_ID);

						//call provider to insert access codes
						$provider->UpdateCodes($USER_ID);

						//update cache for checking
						static::UpdateStat($providerId, $USER_ID, $now);

						$connection->commitTransaction();
					}
				}
			}

			if ($clearCache)
			{
				static::ClearCache($USER_ID);
			}

			$connection->unlock($lockName);
		}
	}
}