したがって、boundaryfunctions saidとすることはできません。また、ModX開発者は、単一のスニペットを含むリソースの使用をお勧めします。しかし、開発者がConnectorのような機能を求めているにもかかわらず、ModXコア開発者がに分割されたGallery extraの解決策があるかもしれません。私のため
if ($_REQUEST['action'] == 'web/phpthumb') {
$version = $modx->getVersionData();
if (version_compare($version['full_version'],'2.1.1-pl') >= 0) {
if ($modx->user->hasSessionContext($modx->context->get('key'))) {
$_SERVER['HTTP_MODAUTH'] = $_SESSION["modx.{$modx->context->get('key')}.user.token"];
} else {
$_SESSION["modx.{$modx->context->get('key')}.user.token"] = 0;
$_SERVER['HTTP_MODAUTH'] = 0;
}
} else {
$_SERVER['HTTP_MODAUTH'] = $modx->site_id;
}
$_REQUEST['HTTP_MODAUTH'] = $_SERVER['HTTP_MODAUTH'];
}
作品:connector.php
では、handleRequest()
呼び出しの前に、承認を偽装コードがあります。最初のif
状態を自分の行動に置き換えるだけでいいです。
UPDATE:私は、コネクタのデフォルトのコンテキストは「mgr
」で、あなたは「mgr
へのアクセスを設定しない限り、匿名ユーザーは(ポリシーチェックを通過しないので、あなたが、あなたのAJAXリクエストで&ctx=web
パラメータを渡す必要があることを言及するのを忘れてしまいました"匿名ユーザーのためのコンテキスト)。
また、私がここで投稿したギャラリーのコードは、匿名のフロントエンドユーザーでは動作しません(バックエンドにログインしているときのみ動作します)。私は次でそれを置き換える:
if (in_array($_REQUEST['action'], array('loadMap', 'loadMarkers'))){
$_SESSION["modx.{$modx->context->get('key')}.user.token"] = 1;
$_SERVER['HTTP_MODAUTH'] = $_REQUEST['HTTP_MODAUTH'] = 1;
}
このコードは、100%安全であるならば、私は知らないが、匿名ユーザーはそれを呼び出したときに、彼はマネージャーにログインしていないと思われる、と管理者があるときログインしてバックエンドからアクションを呼び出すと、彼は強制的にログオフされません。そして、それは私のための十分なセキュリティのように見えます。
このソリューションはまだ移植可能です(つまり、配布可能なExtraに組み込むことができます)が、深刻なプロジェクトではセキュリティをより真剣に検討する必要があります。
問題のための非常に素晴らしい解決策、確かに! – bfncs
更新され、いくつかの詳細がポップアップしました。 – Hnatt