2012-03-18 8 views
2

私はプラグインでmodX Revoを使用していますLoginBabelです。 Babelのマニュアルに書かれているように、私は2つの言語に対して2つのコンテキストを作成し、TVパラメータを使用してcontextSwitchプラグインを作成しました。ほとんどの場合、マニュアルの例のプラグインに似ています。その後、イベントHandleRequestにプラグインを入れました。ModX Revolutionでコンテキストが切り替わらない

ログイン後にコンテキストを切り替える以外はすべて動作しています。ユーザーが承認されている場合、modXはメインページのみを表示し、その他は404ページを表示します。私はコード内でうんざりして、モデルmodx(/core/model/modx/modx.class.phpの1843行目)のswitchContextメソッドがfalseを返すことを発見しました。

public function switchContext($contextKey, $reload = false) { 
     $switched= false; 
     if ($this->context->key != $contextKey) { 
      $switched= $this->_initContext($contextKey, $reload); // RETURNS FALSE 
      if ($switched) { 
       if (is_array($this->config)) { 
        $this->setPlaceholders($this->config, '+'); 
       } 
      } 
     } 
     return $switched; 
    } 

コンテキストは開始できません(同じファイルの同じクラスの_initContextメソッド)。コンテキストは正しく生成されますが、$ this-> context-> checkPolicy( 'load')はfalse(同じファイルの2169行近く)を返します。

protected function _initContext($contextKey, $regenerate = false) { 
    // HERE IS EVERYTHING ALLRIGHT 
    $initialized= false; 
    $oldContext = is_object($this->context) ? $this->context->get('key') : ''; 
    if (isset($this->contexts[$contextKey])) { 
     $this->context= & $this->contexts[$contextKey]; 
    } else { 
     $this->context= $this->newObject('modContext'); 
     $this->context->_fields['key']= $contextKey; 
    } 
    if ($this->context) { //HERE TRUE 
     if (!$this->context->prepare((boolean) $regenerate)) { // HERE TRUE 
      $this->log(modX::LOG_LEVEL_ERROR, 'Could not prepare context: ' . $contextKey); 
     } else { 
      if ($this->context->checkPolicy('load')) { // HERE FALSE - MODX CAN'T DO IT 
       // .. SOME OTHER modX CODE 

その後、私はコアにぶつかるのをやめました。誰かがすでに何かを見たことがあるかもしれませんか、またはmodx Revoコアが、modxがユーザがログインしているときにコンテキストを切り替えることができない理由に答えるのに良いと知っていますか?

p.s.私はコンテクストスイッチプラグインのために別のイベントを使用しようとしました - もちろん、このイベントはプラグインにとって最も正しいものです。そして、私はmodxがユーザがログインしている間だけコンテキストを切り替えることができないことを強調しています!

UPDATE

私はいくつかの権限を編集しようとしました。しかし、何も起こっていない(私は現金をクリアし、すべてのユーザーを悩ませた)。 enter image description here

UPDATE 2つの 権限が間違っていた:彼らはすべて9999と「リスト、veiw、負荷」でなければならない。ここコンテキスト権限のscreeshot(nonEnglish申し訳ありません、しかし、それは明らかなはずである)です。しかし、私が前にしたように第二の文脈にいる間、私は同時にログインできません。今私はそれが同じ問題かどうかを調べようとしました。ログインで第二の問題は非常に簡単solvinegさ

UPDATE 3 :スニペットでは、&コンテキスト= web,eng

答えて

2

しかします$ this->、コンテキスト> checkPolicy( '負荷')戻りがあるはずですparamsはfalse(同じファイルの2169行近く)。

まあ、あなたの答えです!ユーザーは、コンテキストに切り替えるために少なくともコンテキストに対する「読み込み」権限が必要です。

[セキュリティ]> [アクセスポリシー]>ユーザーグループを右クリックして更新を選択します。 [コンテキストアクセス]タブで、すべてのフロントエンドに直面しているコンテキストがリストされていることを確認します(「ロード、リスト&閲覧」アクセスポリシーを参照)。管理者ユーザーグループのためにまずそれをロックアウトしないようにすることができます。また、ログインしていないユーザーに使用される(匿名の)グループもロックアウトできます。

私は、特定の設定について詳しく見ることなく100%確信していませんが、匿名ユーザーのために働く理由を説明する第2コンテキストへのユーザーグループのアクセス権を与えていないと思います。

+0

ありがとうございました!しかし、それは働いていないか、私は何か間違っているようです。ここでは、コンテキスト編集フォームから画面が表示されます(英語以外のインターフェースには申し訳ありませんが、明らかです)。http://habrastorage.org/storage2/19e/7c9/d17/19e7c9d1746481d7e17d4511147793d6.gif – Ist

+0

ランク(3列目) "Users"グループで0に設定されています(これは世界が逆さまになっているように聞こえます)。そうすれば、ユーザーはユーザーグループ内でランクが高くない可能性があります。ユーザーgoups内で異なる役割を使用しない限り、私はそれを単純にし、すべての権限に9999のランクを与えることをお勧めします。これは最低です。 –

+0

ありがとうございました。私は1つのコンテキストでログインし、言語を切り替えている場合、今働いています。しかし、私が "eng"にログインしようとすると、文脈は何も起こらない。同じ問題があるかもしれませんが、私はそうではありません。権限が間違っているとログインできませんでした。 – Ist

関連する問題