Вообще очень интересно.
Код |
---|
var_dump($GLOBALS['USER']->IsAdmin()); |
Метод IsAdmin возвращает либо bool(true), либо bool(false) или NULL (!)
Сделал третий кеш для авторизованных пользователей по аналогии.
Код |
---|
$cache_id = serialize(array($arParams['OBJECT_ID'], ($GLOBALS['USER']->IsAdmin()?true:false), ($GLOBALS['USER']->IsAuthorized()?true:false)));
$uniq_str1 = serialize(array($arParams['OBJECT_ID'], true, false));
$uniq_str2 = serialize(array($arParams['OBJECT_ID'], false, false));
$uniq_str3 = serialize(array($arParams['OBJECT_ID'], false, true));
CPHPCache::Clean($uniq_str1, $cache_path);
CPHPCache::Clean($uniq_str2, $cache_path);
CPHPCache::Clean($uniq_str3, $cache_path);
|
Все работает правильно, кеш для всех 3х случаев чистится и создается так, как нужно.
теперь появилась задача сделать четвертый кеш для определенных групп из настроек модуля.
Пишу :
Код |
---|
$gr = new SomeClass;
$cache_id = serialize(array($arParams['OBJECT_ID'], ($GLOBALS['USER']->IsAdmin()?true:false), ($GLOBALS['USER']->IsAuthorized()?true:false),
$gr->IsModerator()));
$uniq_str1 = serialize(array($arParams['OBJECT_ID'], true, false, false));
$uniq_str2 = serialize(array($arParams['OBJECT_ID'], false, false, false));
$uniq_str3 = serialize(array($arParams['OBJECT_ID'], false, true, false));
$uniq_str4 = serialize(array($arParams['OBJECT_ID'], false, false, true)); // <-
CPHPCache::Clean($uniq_str1, $cache_path);
CPHPCache::Clean($uniq_str2, $cache_path);
CPHPCache::Clean($uniq_str3, $cache_path);
CPHPCache::Clean($uniq_str4, $cache_path); // <-
|
Метод IsModerator() возвращает true или false
Добавил пользователя, который не относится к админам, но попадает под true метода IsModerator(). Для него создается кеш с соответствующими привилегиями к записям, но по событию кеш для этого пользователя
НЕ ОБНОВЛЯЕТСЯ (для остальных трех случаев по прежнему все ок)
Пробовал самые разные варианты, просматривал все возвращаемые методами значения. Пытаюсь сделать по аналогии, но не получается.
Непонятно, почему метод IsAdmin в случае неавторизованного пользователя возвращает NULL, а не false, может дело в этом.
Как можно решить новую проблему ?
Спасибо.