したがって、boundaryfunctionsが言ったように、それは不可能であり、ModX 開発者は単一のスニペットが含まれるリソースを使用することを推奨しています。しかし、開発者の意向にもかかわらずコネクタのような機能を探している人には、推測で作成された解決策があるかもしれません.ModXコア開発者はギャラリーエクストラで分割されています. には、呼び出しの前に、認証を偽装するコードがあります。connector.php
handleRequest()
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'];
}
私のために働きます。if
最初の条件を自分のアクションに置き換えるだけです。
更新: AJAX 要求でパラメーターを渡す必要があることを忘れていました。&ctx=web
コネクタの既定のコンテキストは " mgr
" であり、匿名ユーザーはポリシー チェックに合格しないためです (mgr
匿名ユーザーに " " コンテキストへのアクセスを設定しない限り)。
また、ここに投稿したギャラリー エクストラのコードは、匿名のフロントエンド ユーザーでは機能しない (バックエンドにログインしている場合にのみ機能する) セッションのものをチェックしているように見えるので、次のように置き換えました。次:
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% 安全かどうかはわかりませんが、匿名ユーザーが呼び出した場合、そのユーザーは Manager にログインしていないように見えます。管理者がログインしてバックエンドからアクションを呼び出した場合、彼はログインしていません強制的にログオフしました。そして、それは私にとって十分なセキュリティのようです.
このソリューションはまだ移植可能です (つまり、配布可能な Extra に組み込むことができます) が、重大なプロジェクトではセキュリティをより真剣に研究する必要があります。