Sitecore - 以编程方式清除用户的缓存
Sitecore - programmatically clear user's cache
我有一个自定义角色提供程序,特定用户的角色可以在他们执行某些操作时更改。
这导致了几个问题:
如果将角色添加到用户,这将允许他们访问
页面,这不会生效,直到我清除 sitecore 缓存
手动使用 /sitecore/admin/cache.aspx
我们正在缓存用户呈现的菜单栏。但是当权限
更改,可能会添加新项目/删除项目,但这不会反映出来,因为它来自缓存版本。
有没有办法以编程方式清除特定用户的 sitecore 缓存?
是 - 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()
以获得您要为其清除的特定用户。
我有一个自定义角色提供程序,特定用户的角色可以在他们执行某些操作时更改。
这导致了几个问题:
如果将角色添加到用户,这将允许他们访问 页面,这不会生效,直到我清除 sitecore 缓存 手动使用
/sitecore/admin/cache.aspx
我们正在缓存用户呈现的菜单栏。但是当权限 更改,可能会添加新项目/删除项目,但这不会反映出来,因为它来自缓存版本。
有没有办法以编程方式清除特定用户的 sitecore 缓存?
是 - 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()
以获得您要为其清除的特定用户。