따라서 boundaryfunctions said과 같이 가능하지 않으며 ModX 개발자는 단일 스 니펫이 포함 된 리소스 사용을 권장합니다. 그러나 개발자들의 의지에도 불구하고 커넥터와 같은 기능을 찾으려는 사람들에게는 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 : I 커넥터에 대한 기본 컨텍스트는 "mgr
"이고 당신이 "mgr
에 대한 액세스 권한을 설정하지 않으면 익명 사용자 (정책 검사를 통과하지 않기 때문에 당신이 당신의 AJAX 요청과 &ctx=web
매개 변수를 전달해야한다는 것을 언급하는 것을 잊었다 "익명 사용자를위한 컨텍스트).
또한 여기에 게시 된 Gallery의 코드는 익명의 프런트 엔드 사용자와 작동하지 않는 세션 항목을 확인하는 것 같습니다 (백엔드에 로그인 한 경우에만 작동합니다). 나는 그것을 대체 다음 : 관리자 인 경우
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