API からの getDocumentObject 呼び出し

質問全般・改善要望
返信する
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

API からの getDocumentObject 呼び出し

投稿記事 by iwa »

bug かどうかはわかりませんが、気づいた点を。

set_error_handler を設定した プログラムから API - getDocumentObject を呼び出したいのですが、以下のエラーが発生します。

STRICT: 8 Undefined index: mgrRole <modxまでのパス>modx/manager/includes/document.parser.class.inc.php 1987

該当の箇所を確認すると、権限回りの処理が行われているようです。

コード: 全て選択

 
   1986         if($docgrp) $access .= " OR dg.document_group IN ({$docgrp})";
   1987         $access .= " OR 1='{$_SESSION['mgrRole']}'";
set_error_handler を使わなければいいのですが。。

コード: 全て選択

<?php
// エラーハンドラ 開始
function strict_error_handler($errno, $errstr, $errfile, $errline)
{
    echo "STRICT: {$errno} {$errstr} {$errfile} {$errline} ".PHP_EOL;
}
set_error_handler('strict_error_handler');
// エラーハンドラ終了

$_SERVER['DOCUMENT_ROOT'] = '/var/www/modx';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_URI'] = 'http://localhost/';
define('MODX_API_MODE', true);
include $_SERVER['DOCUMENT_ROOT'].'/index.php';
$modx = new DocumentParser();
$modx->db->connect();
$modx->getSettings();

$doc = $modx->getDocumentObject('alias', <path>);
var_dump($doc);

他の方法として getIdFromAlias から id を取得し、getDocument でも試したのですが、同様に $_SESSION['mgrRole'] を参照するところでエラーとなりました。

コード: 全て選択

   2276         $where = "(sc.id IN ({$ids_str}) {$where_published} AND sc.deleted={$deleted} {$where}) AND (sc.private{$context}=0 {$cond} OR 1='{$_SESSION['mgrRole']}') GROUP BY sc.id        ";
   2277         $orderby = ($sort) ? "{$sort} {$dir}" : '';
よって、強引ですが index.php を include 後に、$_SESSION['mgrRole'] を設定して回避しました。

コード: 全て選択

$_SERVER['DOCUMENT_ROOT'] = '/var/www/modx';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['REQUEST_URI'] = 'http://localhost/';
define('MODX_API_MODE', true);
include $_SERVER['DOCUMENT_ROOT'].'/index.php';
$_SESSION['mgrRole'] = 1;
$modx = new DocumentParser();
API だからすべての権限がないとねと言い聞かせながら。。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: API からの getDocumentObject 呼び出し

投稿記事 by yama »

コード: 全て選択

$access .= " OR 1='{$_SESSION['mgrRole']}'";
この部分

コード: 全て選択

if(isset($_SESSION['mgrRole'])) $access .= " OR 1='{$_SESSION['mgrRole']}'";
このようにするのが正しいように思います。どうでしょうか?
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: API からの getDocumentObject 呼び出し

投稿記事 by iwa »

yama 様

ご返答、ありがとうございます。

反応が遅くなりました。

そうですね。私もそう思うので、適用いたします。
返信する