Права доступа? Настройки сервера?
Друзья мои!
Первым делом хочу извиниться, если задача тривиальна и можно сделать вывод, что я недостаточно приложил усилий для самостоятельного поиска решения (уверяю, это не так: )))
Дело в том, что сайт работает нормально.Так, как от него ожидаешь. Но только до тех пор, пока не открываешь вкладку в режиме «инкогнито» или тупо разлогиниваешься. Вот тут начинается что-то странное. На ряде страниц — белый экран с пустым исходным кодом. Где-то отдаётся resource.content, где-то грузится полностью за исключением пары чанков.
Собственно, несколько дней гуглил, копался в компонентах, экспериментировал с политиками доступа, пытался понять логику и пришёл к выводу, что загвоздка вероятнее всего возникает где-то на уровне прав (картинки это подтверждают).
Я подозреваю, что сниппеты и другие элементы тупо не хотят отрабатывать для неавторизованных пользователей (и более того, когда пытался найти причину глубже, $modx->getObject возвращал null там, где авторизованный пользователь получал нормальный объект (msProducts, в частности))
В общем, у кого было подобное, покажите путь, куда копать.
Заранее спасибо откликнувшимся и пардон, если не вполне доходчиво описал суть)
Первым делом хочу извиниться, если задача тривиальна и можно сделать вывод, что я недостаточно приложил усилий для самостоятельного поиска решения (уверяю, это не так: )))
Дело в том, что сайт работает нормально.Так, как от него ожидаешь. Но только до тех пор, пока не открываешь вкладку в режиме «инкогнито» или тупо разлогиниваешься. Вот тут начинается что-то странное. На ряде страниц — белый экран с пустым исходным кодом. Где-то отдаётся resource.content, где-то грузится полностью за исключением пары чанков.
Собственно, несколько дней гуглил, копался в компонентах, экспериментировал с политиками доступа, пытался понять логику и пришёл к выводу, что загвоздка вероятнее всего возникает где-то на уровне прав (картинки это подтверждают).
Я подозреваю, что сниппеты и другие элементы тупо не хотят отрабатывать для неавторизованных пользователей (и более того, когда пытался найти причину глубже, $modx->getObject возвращал null там, где авторизованный пользователь получал нормальный объект (msProducts, в частности))
В общем, у кого было подобное, покажите путь, куда копать.
Заранее спасибо откликнувшимся и пардон, если не вполне доходчиво описал суть)
Комментарии: 15
У меня в правах на группу аноним стоит Доступ к контексту Load Only. yadi.sk/i/Bz-3Zkxc2wXEFw
Политика доступа: Load Only: только load. yadi.sk/i/sVtvWtzFoACVIw
Больше на группу аноним в правах ничего не настроено. Хотя по идее для работы сайта нужно Load, List and View, почему-то аноним, обычно, прекрасно, работает с Load Only.
Проверь чтоб у группу аноним стояло Load Only. Если настройки от дефолтных не отличаются, пробуй очистить кеш, удалить все из папки core/cache. Затем попробуй развернуть копию сайта на другом хостинге. Возможно он виноват.
Политика доступа: Load Only: только load. yadi.sk/i/sVtvWtzFoACVIw
Больше на группу аноним в правах ничего не настроено. Хотя по идее для работы сайта нужно Load, List and View, почему-то аноним, обычно, прекрасно, работает с Load Only.
Проверь чтоб у группу аноним стояло Load Only. Если настройки от дефолтных не отличаются, пробуй очистить кеш, удалить все из папки core/cache. Затем попробуй развернуть копию сайта на другом хостинге. Возможно он виноват.
Привет! Спасибо за ответ.
В общем, настройки политики у меня ровно такие же, как на твоём скриншоте (хотя пробовал разные комбинации). Кор/кэш чистил, разумеется, неоднократно, результата, увы, не даёт.
В плане хостинга тоже маловероятно, т.к. на локалке у меня тоже такое было (да и всё-таки хоть какое-то логичное объяснение быть должно).
Может есть ещё предположения?
В общем, настройки политики у меня ровно такие же, как на твоём скриншоте (хотя пробовал разные комбинации). Кор/кэш чистил, разумеется, неоднократно, результата, увы, не даёт.
В плане хостинга тоже маловероятно, т.к. на локалке у меня тоже такое было (да и всё-таки хоть какое-то логичное объяснение быть должно).
Может есть ещё предположения?
да и всё-таки хоть какое-то логичное объяснение быть должноХм… ну если тебе так хочется логичное объяснение. То берешь ситуацию $modx->getObject возвращал null и смотришь в D:\OpenServer\domains\modx.loc\core\model\modx\modx.class.php нет getObject.
class modX extends xPDO {
Открываешь D:\OpenServer\domains\modx.loc\core\xpdo\xpdo.class.php и на строке 840 находишьpublic function getObject($className, $criteria= null, $cacheFlag= true) {
$instance= null;
$this->sanitizePKCriteria($className, $criteria);
if ($criteria !== null) {
$instance = $this->call($className, 'load', array(& $this, $className, $criteria, $cacheFlag));
}
return $instance;
}
добавляешьpublic function getObject($className, $criteria= null, $cacheFlag= true) {
$instance= null;
$this->sanitizePKCriteria($className, $criteria);
$this->log(1,"criteria ".print_r($criteria,1)); // или $this->log(1,"criteria $criteria"); а то print_r выгрузит в лог всю базу бывает.
if ($criteria !== null) {
$instance = $this->call($className, 'load', array(& $this, $className, $criteria, $cacheFlag));
$this->log(1,"instance $instance");
}
return $instance;
}
Смотришь по логу что отдало null. Затем, если в логе «instance », то есть $instance = null, ищешь public function call выясняешь что эта функция вызывает и т.д.Муторно. Долго. Но иного способа нет. Зато больше понимания как modx работает :-).
Вообщем работа с правами реализована в \core\model\modx\modaccessibleobject.class.php
Там логов полно, но на debug уровне. То есть, в системных настройка ставим log_level = 4 и смотрим что происходит.
Там логов полно, но на debug уровне. То есть, в системных настройка ставим log_level = 4 и смотрим что происходит.
Это вот функция
Скорее всего валится на $instance->checkPolicy('load').Открываем core\model\modx\modsnippet.class.php. Там ничего такого нет но class modSnippet extends modScript
Вообщем участвуют 2 метода
modaccessibleobject.class.php
public static function _loadInstance(& $xpdo, $className, $criteria, $row) {
/** @var modAccessibleObject $instance */
$instance = xPDOObject :: _loadInstance($xpdo, $className, $criteria, $row);
if ($instance instanceof modAccessibleObject && !$instance->checkPolicy('load')) {
if ($xpdo instanceof modX) {
$userid = $xpdo->getLoginUserID();
if (!$userid) $userid = '0';
$xpdo->log(xPDO::LOG_LEVEL_INFO, "Principal {$userid} does not have permission to load object of class {$instance->_class} with primary key: " . (is_object($instance) && method_exists($instance,'getPrimaryKey') ? print_r($instance->getPrimaryKey(), true) : ''));
}
$instance = null;
}
return $instance;
}
То есть 0 это просто id юзера.Скорее всего валится на $instance->checkPolicy('load').
Вообщем участвуют 2 метода
modaccessibleobject.class.php
public function checkPolicy($criteria, $targets = null, modUser $user = null) {
if(!$user){
$user = & $this->xpdo->user;
}
if ($criteria && $this->xpdo instanceof modX && $this->xpdo->getSessionState() == modX::SESSION_STATE_INITIALIZED) {
if ($user->get('sudo')) return true;
if (!is_array($criteria) && is_scalar($criteria)) {
$criteria = array("{$criteria}" => true);
}
$policy = $this->findPolicy();
if (!empty($policy)) {
$principal = $user->getAttributes($targets);
if (!empty($principal)) {
foreach ($policy as $policyAccess => $access) {
foreach ($access as $targetId => $targetPolicy) {
foreach ($targetPolicy as $policyIndex => $applicablePolicy) {
if ($this->xpdo->getDebug() === true)
$this->xpdo->log(xPDO::LOG_LEVEL_DEBUG, 'target pk='. $this->getPrimaryKey() .'; evaluating policy: ' . print_r($applicablePolicy, 1) . ' against principal for user id=' . $user->id .': ' . print_r($principal[$policyAccess], 1));
$principalPolicyData = array();
$principalAuthority = 9999;
if (isset($principal[$policyAccess][$targetId]) && is_array($principal[$policyAccess][$targetId])) {
foreach ($principal[$policyAccess][$targetId] as $acl) {
$principalAuthority = intval($acl['authority']);
$principalPolicyData = $acl['policy'];
$principalId = $acl['principal'];
if ($applicablePolicy['principal'] == $principalId) {
if ($principalAuthority <= $applicablePolicy['authority']) {
if (!$applicablePolicy['policy']) {
return true;
}
if (empty($principalPolicyData)) $principalPolicyData = array();
$matches = array_intersect_assoc($principalPolicyData, $applicablePolicy['policy']);
if ($matches) {
if ($this->xpdo->getDebug() === true)
$this->xpdo->log(modX::LOG_LEVEL_DEBUG, 'Evaluating policy matches: ' . print_r($matches, 1));
$matched = array_diff_assoc($criteria, $matches);
if (empty($matched)) {
return true;
}
}
}
}
}
}
}
}
}
}
return false;
}
}
return true;
}
и modelement.class.phppublic function findPolicy($context = '') {
$policy = array();
$enabled = true;
$context = !empty($context) ? $context : $this->xpdo->context->get('key');
if ($context === $this->xpdo->context->get('key')) {
$enabled = (boolean) $this->xpdo->getOption('access_category_enabled', null, true);
} elseif ($this->xpdo->getContext($context)) {
$enabled = (boolean) $this->xpdo->contexts[$context]->getOption('access_category_enabled', true);
}
if ($enabled) {
if (empty($this->_policies) || !isset($this->_policies[$context])) {
$accessTable = $this->xpdo->getTableName('modAccessCategory');
$policyTable = $this->xpdo->getTableName('modAccessPolicy');
$categoryClosureTable = $this->xpdo->getTableName('modCategoryClosure');
$sql = "SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM {$accessTable} Acl " .
"LEFT JOIN {$policyTable} Policy ON Policy.id = Acl.policy " .
"JOIN {$categoryClosureTable} CategoryClosure ON CategoryClosure.descendant = :category " .
"AND Acl.principal_class = 'modUserGroup' " .
"AND CategoryClosure.ancestor = Acl.target " .
"AND (Acl.context_key = :context OR Acl.context_key IS NULL OR Acl.context_key = '') " .
"ORDER BY CategoryClosure.depth DESC, target, principal, authority ASC";
$bindings = array(
':category' => $this->get('category'),
':context' => $context,
);
$query = new xPDOCriteria($this->xpdo, $sql, $bindings);
if ($query->stmt && $query->stmt->execute()) {
while ($row = $query->stmt->fetch(PDO::FETCH_ASSOC)) {
$policy['modAccessCategory'][$row['target']][] = array(
'principal' => $row['principal'],
'authority' => $row['authority'],
'policy' => $row['data'] ? $this->xpdo->fromJSON($row['data'], true) : array(),
);
}
}
$this->_policies[$context] = $policy;
} else {
$policy = $this->_policies[$context];
}
}
return $policy;
}
В modaccessibleobject.class.php после $policy = $this->findPolicy(); строка 219 вставляем$this->xpdo->log(xPDO::LOG_LEVEL_DEBUG, "policy ".print_r($policy->toArray(),1));
Прогружаем страницу и смотрим лог.
пробежавшись по массиву, не обнаружил ничего примечательного(признаться, я и не знаю, чего искать)))
вот часть распечатанного дампа…
<cut/>
вот часть распечатанного дампа…
<cut/>
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessContext] => Array
(
[web] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 9999
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
[1] => Array
(
[principal] => 1
[authority] => 0
[policy] => Array
(
[about] => 1
[access_permissions] => 1
[actions] => 1
[change_password] => 1
[change_profile] => 1
[charsets] => 1
[class_map] => 1
[components] => 1
[content_types] => 1
[countries] => 1
[create] => 1
[credits] => 1
[customize_forms] => 1
[dashboards] => 1
[database] => 1
[database_truncate] => 1
[delete_category] => 1
[delete_chunk] => 1
[delete_context] => 1
[delete_document] => 1
[delete_eventlog] => 1
[delete_plugin] => 1
[delete_propertyset] => 1
[delete_role] => 1
[delete_snippet] => 1
[delete_template] => 1
[delete_tv] => 1
[delete_user] => 1
[directory_chmod] => 1
[directory_create] => 1
[directory_list] => 1
[directory_remove] => 1
[directory_update] => 1
[edit_category] => 1
[edit_chunk] => 1
[edit_context] => 1
[edit_document] => 1
[edit_locked] => 1
[edit_plugin] => 1
[edit_propertyset] => 1
[edit_role] => 1
[edit_snippet] => 1
[edit_template] => 1
[edit_tv] => 1
[edit_user] => 1
[element_tree] => 1
[empty_cache] => 1
[error_log_erase] => 1
[error_log_view] => 1
[events] => 1
[export_static] => 1
[file_create] => 1
[file_list] => 1
[file_manager] => 1
[file_remove] => 1
[file_tree] => 1
[file_update] => 1
[file_upload] => 1
[file_unpack] => 1
[file_view] => 1
[flush_sessions] => 1
[frames] => 1
[help] => 1
[home] => 1
[import_static] => 1
[languages] => 1
[lexicons] => 1
[list] => 1
[load] => 1
[logout] => 1
[logs] => 1
[menus] => 1
[menu_reports] => 1
[menu_security] => 1
[menu_site] => 1
[menu_support] => 1
[menu_system] => 1
[menu_tools] => 1
[menu_user] => 1
[messages] => 1
[namespaces] => 1
[new_category] => 1
[new_chunk] => 1
[new_context] => 1
[new_document] => 1
[new_document_in_root] => 1
[new_plugin] => 1
[new_propertyset] => 1
[new_role] => 1
[new_snippet] => 1
[new_static_resource] => 1
[new_symlink] => 1
[new_template] => 1
[new_tv] => 1
[new_user] => 1
[new_weblink] => 1
[packages] => 1
[policy_delete] => 1
[policy_edit] => 1
[policy_new] => 1
[policy_save] => 1
[policy_template_delete] => 1
[policy_template_edit] => 1
[policy_template_new] => 1
[policy_template_save] => 1
[policy_template_view] => 1
[policy_view] => 1
[property_sets] => 1
[providers] => 1
[publish_document] => 1
[purge_deleted] => 1
[remove] => 1
[remove_locks] => 1
[resource_duplicate] => 1
[resourcegroup_delete] => 1
[resourcegroup_edit] => 1
[resourcegroup_new] => 1
[resourcegroup_resource_edit] => 1
[resourcegroup_resource_list] => 1
[resourcegroup_save] => 1
[resourcegroup_view] => 1
[resource_quick_create] => 1
[resource_quick_update] => 1
[resource_tree] => 1
[save] => 1
[save_category] => 1
[save_chunk] => 1
[save_context] => 1
[save_document] => 1
[save_plugin] => 1
[save_propertyset] => 1
[save_role] => 1
[save_snippet] => 1
[save_template] => 1
[save_tv] => 1
[save_user] => 1
[search] => 1
[set_sudo] => 1
[settings] => 1
[sources] => 1
[source_delete] => 1
[source_edit] => 1
[source_save] => 1
[source_view] => 1
[steal_locks] => 1
[tree_show_element_ids] => 1
[tree_show_resource_ids] => 1
[undelete_document] => 1
[unlock_element_properties] => 1
[unpublish_document] => 1
[usergroup_delete] => 1
[usergroup_edit] => 1
[usergroup_new] => 1
[usergroup_save] => 1
[usergroup_user_edit] => 1
[usergroup_user_list] => 1
[usergroup_view] => 1
[view] => 1
[view_category] => 1
[view_chunk] => 1
[view_context] => 1
[view_document] => 1
[view_element] => 1
[view_eventlog] => 1
[view_offline] => 1
[view_plugin] => 1
[view_propertyset] => 1
[view_role] => 1
[view_snippet] => 1
[view_sysinfo] => 1
[view_template] => 1
[view_tv] => 1
[view_unpublished] => 1
[view_user] => 1
[workspaces] => 1
[formit] => 1
[formit_encryptions] => 1
)
)
[2] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[about] => 1
[access_permissions] => 1
[actions] => 1
[change_password] => 1
[change_profile] => 1
[charsets] => 1
[class_map] => 1
[components] => 1
[content_types] => 1
[countries] => 1
[create] => 1
[credits] => 1
[customize_forms] => 1
[dashboards] => 1
[database] => 1
[database_truncate] => 1
[delete_category] => 1
[delete_chunk] => 1
[delete_context] => 1
[delete_document] => 1
[delete_eventlog] => 1
[delete_plugin] => 1
[delete_propertyset] => 1
[delete_role] => 1
[delete_snippet] => 1
[delete_template] => 1
[delete_tv] => 1
[delete_user] => 1
[directory_chmod] => 1
[directory_create] => 1
[directory_list] => 1
[directory_remove] => 1
[directory_update] => 1
[edit_category] => 1
[edit_chunk] => 1
[edit_context] => 1
[edit_document] => 1
[edit_locked] => 1
[edit_plugin] => 1
[edit_propertyset] => 1
[edit_role] => 1
[edit_snippet] => 1
[edit_template] => 1
[edit_tv] => 1
[edit_user] => 1
[element_tree] => 1
[empty_cache] => 1
[error_log_erase] => 1
[error_log_view] => 1
[events] => 1
[export_static] => 1
[file_create] => 1
[file_list] => 1
[file_manager] => 1
[file_remove] => 1
[file_tree] => 1
[file_update] => 1
[file_upload] => 1
[file_unpack] => 1
[file_view] => 1
[flush_sessions] => 1
[frames] => 1
[help] => 1
[home] => 1
[import_static] => 1
[languages] => 1
[lexicons] => 1
[list] => 1
[load] => 1
[logout] => 1
[logs] => 1
[menus] => 1
[menu_reports] => 1
[menu_security] => 1
[menu_site] => 1
[menu_support] => 1
[menu_system] => 1
[menu_tools] => 1
[menu_user] => 1
[messages] => 1
[namespaces] => 1
[new_category] => 1
[new_chunk] => 1
[new_context] => 1
[new_document] => 1
[new_document_in_root] => 1
[new_plugin] => 1
[new_propertyset] => 1
[new_role] => 1
[new_snippet] => 1
[new_static_resource] => 1
[new_symlink] => 1
[new_template] => 1
[new_tv] => 1
[new_user] => 1
[new_weblink] => 1
[packages] => 1
[policy_delete] => 1
[policy_edit] => 1
[policy_new] => 1
[policy_save] => 1
[policy_template_delete] => 1
[policy_template_edit] => 1
[policy_template_new] => 1
[policy_template_save] => 1
[policy_template_view] => 1
[policy_view] => 1
[property_sets] => 1
[providers] => 1
[publish_document] => 1
[purge_deleted] => 1
[remove] => 1
[remove_locks] => 1
[resource_duplicate] => 1
[resourcegroup_delete] => 1
[resourcegroup_edit] => 1
[resourcegroup_new] => 1
[resourcegroup_resource_edit] => 1
[resourcegroup_resource_list] => 1
[resourcegroup_save] => 1
[resourcegroup_view] => 1
[resource_quick_create] => 1
[resource_quick_update] => 1
[resource_tree] => 1
[save] => 1
[save_category] => 1
[save_chunk] => 1
[save_context] => 1
[save_document] => 1
[save_plugin] => 1
[save_propertyset] => 1
[save_role] => 1
[save_snippet] => 1
[save_template] => 1
[save_tv] => 1
[save_user] => 1
[search] => 1
[set_sudo] => 1
[settings] => 1
[sources] => 1
[source_delete] => 1
[source_edit] => 1
[source_save] => 1
[source_view] => 1
[steal_locks] => 1
[tree_show_element_ids] => 1
[tree_show_resource_ids] => 1
[undelete_document] => 1
[unlock_element_properties] => 1
[unpublish_document] => 1
[usergroup_delete] => 1
[usergroup_edit] => 1
[usergroup_new] => 1
[usergroup_save] => 1
[usergroup_user_edit] => 1
[usergroup_user_list] => 1
[usergroup_view] => 1
[view] => 1
[view_category] => 1
[view_chunk] => 1
[view_context] => 1
[view_document] => 1
[view_element] => 1
[view_eventlog] => 1
[view_offline] => 1
[view_plugin] => 1
[view_propertyset] => 1
[view_role] => 1
[view_snippet] => 1
[view_sysinfo] => 1
[view_template] => 1
[view_tv] => 1
[view_unpublished] => 1
[view_user] => 1
[workspaces] => 1
[formit] => 1
[formit_encryptions] => 1
)
)
)
)
)
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessCategory] => Array
(
[9] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 9999
[policy] => Array
(
[load] => 1
[list] => 1
[view] => 1
[formit] => 1
[formit_encryptions] =>
)
)
[1] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
)
)
)
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessCategory] => Array
(
[9] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 9999
[policy] => Array
(
[load] => 1
[list] => 1
[view] => 1
[formit] => 1
[formit_encryptions] =>
)
)
[1] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
)
)
)
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessCategory] => Array
(
[9] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 9999
[policy] => Array
(
[load] => 1
[list] => 1
[view] => 1
[formit] => 1
[formit_encryptions] =>
)
)
[1] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
)
)
)
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessCategory] => Array
(
[8] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 9999
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
[1] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
)
)
)
Так! Должно быть сначала массив $policy и затем Principal 0 does not have permission to load object of class modSnippet и так повторяться несколько раз.
Ищите в логе Principal 0 does not have permission to load object of class modSnippet и сюда часть рядом с ними. Если рядом массивов нет, то не прогружается сессия.
Ищите в логе Principal 0 does not have permission to load object of class modSnippet и сюда часть рядом с ними. Если рядом массивов нет, то не прогружается сессия.
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessCategory] => Array
(
[6] => Array
(
[0] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
)
)
)
[2019-11-15 16:54:01] (INFO @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 40) Principal 0 does not have permission to load object of class modSnippet with primary key: 39
[2019-11-15 16:54:01] (ERROR @ /var/www/u0859369/data/www/idplitka.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 345) [pdoTools] Could not load snippet "msProducts"
[2019-11-15 16:54:01] (DEBUG @ /var/www/u0859369/data/www/idplitka.ru/core/model/modx/modaccessibleobject.class.php : 220) policy Array
(
[modAccessCategory] => Array
(
[8] => Array
(
[0] => Array
(
[principal] => 0
[authority] => 9999
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
[1] => Array
(
[principal] => 2
[authority] => 0
[policy] => Array
(
[load] => 1
[formit] => 1
[formit_encryptions] =>
)
)
)
)
)
Если я правильно понял…+ про сессии он тож чот писал
Не хватает инфы :-( сделайте
$this->xpdo->log(xPDO::LOG_LEVEL_DEBUG, "policy ".print_r($policy,1)."\r\n class ".$this->_class."\r\n id ".$this->getPrimaryKey());
У меня лог[2019-11-15 17:56:56] (DEBUG @ D:\OpenServer\domains\modx.loc\core\model\modx\modaccessibleobject.class.php : 220) policy Array
(
)
class modSnippet
id 126
modAccessCategory не к сниппетам относятся вроде
лог
давайте пощадим сюда зашедших))
давайте пощадим сюда зашедших))
проверте таблицу modx_access_category
Она по идее должна быть пустой. Если там что-то есть, то вы наверно доступ манагерам к категориям элементов ограничивали. То есть, кому-то дали права а остальным облом. В том числе и анонимам. Если я, конечно, верно код интерпритировал. Доступ к категориям редактируется здесь yadi.sk/i/4CM-C0bYWRRFjg
Если у кого-то доступ настроен, то надо и анонимам сделать аналогично. Только контекст на web поменять.
Она по идее должна быть пустой. Если там что-то есть, то вы наверно доступ манагерам к категориям элементов ограничивали. То есть, кому-то дали права а остальным облом. В том числе и анонимам. Если я, конечно, верно код интерпритировал. Доступ к категориям редактируется здесь yadi.sk/i/4CM-C0bYWRRFjg
Если у кого-то доступ настроен, то надо и анонимам сделать аналогично. Только контекст на web поменять.
аааааа! ты лучший! куда спасибо скинуть?)
очистка таблицы решила проблему, но тем не менее надо бы разобраться, как правильно назначать права контент-менеджерам, но уж с этим как-нибудь, думаю, разберусь))
очистка таблицы решила проблему, но тем не менее надо бы разобраться, как правильно назначать права контент-менеджерам, но уж с этим как-нибудь, думаю, разберусь))
Рад что помог :-). Спасибо скинуть это хорошо :-). В моем профиле кнопка «Отправить деньги». Но на мат.вознаграждение не рассчитывал :-). И если что-то отправите, то все по вашему желанию :-)
if ($criteria && $this->xpdo instanceof modX && $this->xpdo->getSessionState() == modX::SESSION_STATE_INITIALIZED) {
и yadi.sk/i/LxtgR47-77XUMgТо есть, сессия не прогружается и права false.
В modsessionhandler.class.php после $this->session= $this->modx->getObject('modSession', array('id' => $id), $this->cacheLifetime); строка 159 ставим
$this->modx->log(modX::LOG_LEVEL_INFO, "autoCreate $autoCreate session ".print_r($this->session->toArray(),1));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.