• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/security/currentuser.php
  • Класс: BitrixMainSecurityCurrentUser
  • Вызов: CurrentUser::loadUserSecurityPolicy
protected function loadUserSecurityPolicy()
{
	$this->policy = static::$defaultGroupPolicy;
	if ($this->policy["SESSION_TIMEOUT"] <= 0)
		$this->policy["SESSION_TIMEOUT"] = ini_get("session.gc_maxlifetime") / 60;

	$connection = MainApplication::getDbConnection();
	$sqlHelper = $connection->getSqlHelper();

	$sql =
		"SELECT G.SECURITY_POLICY ".
		"FROM b_group G ".
		"WHERE G.ID = 2 ";

	if ($this->isAuthenticated)
	{
		$sql .=
			"UNION ".
			"SELECT G.SECURITY_POLICY ".
			"FROM b_group G ".
			"   INNER JOIN b_user_group UG ON (G.ID = UG.GROUP_ID) ".
			"WHERE UG.USER_ID = ".intval($this->userId)." ".
			"	AND ((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <= ".$sqlHelper->getCurrentDateTimeFunction().")) ".
			"	AND ((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >= ".$sqlHelper->getCurrentDateTimeFunction().")) ";
	}

	$recordset = $connection->query($sql);
	while ($record = $recordset->fetch())
	{
		if (!empty($record["SECURITY_POLICY"]))
			$groupPolicy = unserialize($record["SECURITY_POLICY"]);
		else
			continue;

		if (!is_array($groupPolicy))
			continue;

		foreach ($groupPolicy as $key => $val)
		{
			switch ($key)
			{
				case "STORE_IP_MASK":
				case "SESSION_IP_MASK":
					if ($this->policy[$key] < $val)
						$this->policy[$key] = $val;
					break;
				case "SESSION_TIMEOUT":
					if ($this->policy[$key] <= 0 || $this->policy[$key] > $val)
						$this->policy[$key] = $val;
					break;
				case "PASSWORD_LENGTH":
					if ($this->policy[$key] <= 0 || $this->policy[$key] < $val)
						$this->policy[$key] = $val;
					break;
				case "PASSWORD_UPPERCASE":
				case "PASSWORD_LOWERCASE":
				case "PASSWORD_DIGITS":
				case "PASSWORD_PUNCTUATION":
					if ($val === "Y")
						$this->policy[$key] = "Y";
					break;
				case "LOGIN_ATTEMPTS":
					if ($val > 0 && ($this->policy[$key] <= 0 || $this->policy[$key] > $val))
						$this->policy[$key] = $val;
					break;
				default:
					if ($this->policy[$key] > $val)
						$this->policy[$key] = $val;
			}
		}
	}

	if ($this->policy["PASSWORD_LENGTH"] === false)
		$this->policy["PASSWORD_LENGTH"] = 6;
}