/** * オペレーションの実行権限をチェックする * * @param string オペレーション名 * @param array リクエストパラメータ * @return boolean 権限がある場合 true; 無い場合 false */ protected function checkOperationAuth($operation_name, &$arrParam, &$arrApiConfig) { if (Utils::isBlank($operation_name)) { return false; } $arrAuthTypes = explode('|', $arrApiConfig['auth_types']); $result = false; foreach ($arrAuthTypes as $auth_type) { $ret = false; switch ($auth_type) { case self::API_AUTH_TYPE_REFERER: $ret = static::checkReferer(); break; case self::API_AUTH_TYPE_SESSION_TOKEN: $ret = SessionHelper::isValidToken(false); break; case self::API_AUTH_TYPE_API_SIGNATURE: $ret = static::checkApiSignature($operation_name, $arrParam, $arrApiConfig); break; case self::API_AUTH_TYPE_CUSTOMER: $ret = static::checkCustomerAccount($arrParam['login_email'], $arrParam['login_password']); break; case self::API_AUTH_TYPE_MEMBER: $ret = static::checkMemberAccount($arrParam['member_id'], $arrParam['member_password']); break; case self::API_AUTH_TYPE_CUSTOMER_LOGIN_SESSION: /* @var $objCustomer Customer */ $objCustomer = Application::alias('eccube.customer'); $ret = $objCustomer->isLoginSuccess(); break; case self::API_AUTH_TYPE_MEMBER_LOGIN_SESSION: $ret = Utils::sfIsSuccess(new Session(), false); break; case self::API_AUTH_TYPE_IP: $ret = static::checkIp($operation_name); break; case self::API_AUTH_TYPE_HOST: $ret = static::checkHost($operation_name); break; case self::API_AUTH_TYPE_SSL: $ret = Utils::sfIsHTTPS(); break; case self::API_AUTH_TYPE_OPEN: $result = true; break 2; // foreachも抜ける // foreachも抜ける default: $ret = false; break; } if ($ret === true) { $result = true; } else { $result = false; break; // 1つでもfalseがあれば,その時点で終了 } } return $result; }
/** * POST アクセスの妥当性を検証する. * * 生成されたトランザクショントークンの妥当性を検証し, * 不正な場合はエラー画面へ遷移する. * * この関数は, 基本的に init() 関数で呼び出され, POST アクセスの場合は自動的に * トランザクショントークンを検証する. * ページによって検証タイミングなどを制御する必要がある場合は, この関数を * オーバーライドし, 個別に設定を行うこと. * * @access protected * @param boolean $is_admin 管理画面でエラー表示をする場合 true * @return void */ public function doValidToken($is_admin = false) { if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!SessionHelper::isValidToken(false)) { if ($is_admin) { Utils::sfDispError(INVALID_MOVE_ERRORR); } else { Utils::sfDispSiteError(PAGE_ERROR, '', true); } $this->app['ecube.response.action_exit']; } } }