Вообще очень интересно.
[CODE] var_dump($GLOBALS['USER']->IsAdmin());[/CODE]Метод IsAdmin возвращает либо bool(true), либо bool(false) или NULL (!)
Сделал третий кеш для авторизованных пользователей по аналогии.
[CODE]$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);
[/CODE]Все работает правильно, кеш для всех 3х случаев чистится и создается так, как нужно.
теперь появилась задача сделать четвертый кеш для определенных групп из настроек модуля.
Пишу :
[CODE]$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); // <-
[/CODE]
Метод IsModerator() возвращает true или false
Добавил пользователя, который не относится к админам, но попадает под true метода IsModerator(). Для него создается кеш с соответствующими привилегиями к записям, но по событию кеш для этого пользователя [B]НЕ ОБНОВЛЯЕТСЯ[/B] (для остальных трех случаев по прежнему все ок)
Пробовал самые разные варианты, просматривал все возвращаемые методами значения. Пытаюсь сделать по аналогии, но не получается.
Непонятно, почему метод IsAdmin в случае неавторизованного пользователя возвращает NULL, а не false, может дело в этом.
Как можно решить новую проблему ?
Спасибо.