Sitecore - программно очистить кеш пользователя

У меня есть пользовательский поставщик ролей, в котором роль конкретного пользователя может меняться при выполнении определенных действий.

Это вызывает пару проблем:

  1. Если к пользователю добавлена ​​роль, которая позволит ему получить доступ к странице, это не вступит в силу, пока я не очистлю кэш sitecore вручную, используя /sitecore/admin/cache.aspx

  2. Мы кэшируем визуализацию строки меню пользователем. Но когда разрешения меняются, новые элементы могут добавляться / удаляться, но это не отражается, потому что это происходит из кэшированной версии.

Есть ли способ, которым я могу программно очистить кеш сайта конкретного пользователя?

1 ответ

Решение

Да - способ, которым Sitecore делает это, добавляет пользовательские данные в ключ кэша для рендеринга. Это хранилище в html-кэше, поэтому для его очистки необходимо получить html-кеш и очистить все записи, содержащие имя пользователя.

Этот фрагмент сделает это:

// Need to clear the cache for the header and the user profile....
var htmlCache = CacheManager.GetHtmlCache(Context.Site);

// Remove all cache keys that contain the currently logged in user.
var cacheKey = $"#login:True_#user:{Context.GetUserName()}";
htmlCache.RemoveKeysContaining(cacheKey);

Это очищает все записи в html-кэше для текущего пользователя. Если вы хотите очистить для другого пользователя, просто измените Context.GetUserName() чтобы получить конкретного пользователя, которого вы хотите очистить.

Другие вопросы по тегам