gpt4 book ai didi

ModX Revolution 不会切换上下文

转载 作者:行者123 更新时间:2023-12-04 05:53:48 26 4
gpt4 key购买 nike

我正在使用带有插件的 modX Revo LoginBabel .正如 Babel 手册中所写,我为两种语言制作了 2 个上下文,使用了 TV 参数并编写了 contextSwitch 插件。它主要类似于手册中示例中的插件。之后,我将插件放在事件 HandleRequest 上。

除了登录后切换上下文外,一切正常:如果用户被授权,modX 只显示主页,其他显示 404 页面。我试图翻找代码,发现模型 modx 的 switchContext 方法(/core/model/modx/modx.class.php 的第 1843 行)返回 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 不能切换上下文?

附言我尝试将另一个事件用于上下文切换插件 - 但当然这个事件对于插件来说是最正确的。而且我要强调的是,只有在用户登录时 modx 才能切换上下文!

更新

我试图编辑一些权限。但是什么也没发生(我清除了现金并重新登录了所有用户)。这是上下文权限的截图(抱歉非英语,但应该很清楚):
enter image description here

更新 2
权限错误:它们必须全部为 9999 和“列表、查看、加载”。但与此同时,我无法像以前一样在第二个上下文中登录。现在我试图找出它是否是同样的问题。

更新 3
登录的第二个问题很容易解决:在代码片段参数中应该有 &contexts= web,eng

最佳答案

but $this->context->checkPolicy('load') returns false (near 2169 line of the same file).



嗯,这就是你的答案!用户至少需要上下文的“加载”权限才能切换到它。

转到安全 > 访问策略 > 右键单击​​用户组并选择更新它。在“上下文访问”选项卡中,确保所有面向前端的上下文都在此处列出,最好使用“加载、列表和查看”访问策略。可能首先要为管理员用户组执行此操作,以防止自己以及用于未登录用户的(匿名)组被锁定。

我认为,虽然在没有看到有关您的特定设置的更多信息的情况下不能 100% 确定,但您没有授予用户组访问第二个上下文的权限,这可以解释为什么它适用于匿名用户。

关于ModX Revolution 不会切换上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com