using System; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence.Repositories; using umbraco.interfaces; namespace Umbraco.Web.Cache { /// /// Handles User cache invalidation/refreshing /// public sealed class UserCacheRefresher : CacheRefresherBase { protected override UserCacheRefresher Instance { get { return this; } } public override Guid UniqueIdentifier { get { return Guid.Parse(DistributedCache.UserCacheRefresherId); } } public override string Name { get { return "User cache refresher"; } } public override void RefreshAll() { ClearAllIsolatedCacheByEntityType(); if (UserPermissionsCache) UserPermissionsCache.Result.ClearCacheByKeySearch(CacheKeys.UserPermissionsCacheKey); base.RefreshAll(); } public override void Refresh(int id) { Remove(id); base.Refresh(id); } public override void Remove(int id) { var userCache = ApplicationContext.Current.ApplicationCache.IsolatedRuntimeCache.GetCache(); if (userCache) userCache.Result.ClearCacheItem(RepositoryBase.GetCacheIdKey(id)); if (UserPermissionsCache) UserPermissionsCache.Result.ClearCacheByKeySearch(string.Format("{0}{1}", CacheKeys.UserPermissionsCacheKey, id)); base.Remove(id); } private Attempt UserPermissionsCache { get { return ApplicationContext.Current.ApplicationCache.IsolatedRuntimeCache.GetCache(); } } } }