Merge branch 'release/15.4' into v15/dev
# Conflicts: # version.json
This commit is contained in:
@@ -45,8 +45,8 @@
|
|||||||
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
|
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
|
||||||
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
|
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
|
||||||
<PackageVersion Include="Dazinator.Extensions.FileProviders" Version="2.0.0" />
|
<PackageVersion Include="Dazinator.Extensions.FileProviders" Version="2.0.0" />
|
||||||
<PackageVersion Include="Examine" Version="3.7.0" />
|
<PackageVersion Include="Examine" Version="3.7.1" />
|
||||||
<PackageVersion Include="Examine.Core" Version="3.7.0" />
|
<PackageVersion Include="Examine.Core" Version="3.7.1" />
|
||||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.74" />
|
<PackageVersion Include="HtmlAgilityPack" Version="1.11.74" />
|
||||||
<PackageVersion Include="JsonPatch.Net" Version="3.1.1" />
|
<PackageVersion Include="JsonPatch.Net" Version="3.1.1" />
|
||||||
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
|
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
|
||||||
@@ -100,4 +100,4 @@
|
|||||||
<!-- Examine.Lucene brings in a vulnerable version of Lucene.Net.Replicator -->
|
<!-- Examine.Lucene brings in a vulnerable version of Lucene.Net.Replicator -->
|
||||||
<PackageVersion Include="Lucene.Net.Replicator" Version="4.8.0-beta00017" />
|
<PackageVersion Include="Lucene.Net.Replicator" Version="4.8.0-beta00017" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -22,4 +22,6 @@ public static class CacheKeys
|
|||||||
|
|
||||||
public const string PreviewPropertyCacheKeyPrefix = "Cache.Property.CacheValues[D:";
|
public const string PreviewPropertyCacheKeyPrefix = "Cache.Property.CacheValues[D:";
|
||||||
public const string PropertyCacheKeyPrefix = "Cache.Property.CacheValues[P:";
|
public const string PropertyCacheKeyPrefix = "Cache.Property.CacheValues[P:";
|
||||||
|
|
||||||
|
public const string MemberUserNameCachePrefix = "uRepo_userNameKey+";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,11 +71,22 @@ public sealed class MemberCacheRefresher : PayloadCacheRefresherBase<MemberCache
|
|||||||
foreach (JsonPayload p in payloads)
|
foreach (JsonPayload p in payloads)
|
||||||
{
|
{
|
||||||
_idKeyMap.ClearCache(p.Id);
|
_idKeyMap.ClearCache(p.Id);
|
||||||
if (memberCache.Success)
|
if (memberCache.Success is false)
|
||||||
{
|
{
|
||||||
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, int>(p.Id));
|
continue;
|
||||||
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, string>(p.Username));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, int>(p.Id));
|
||||||
|
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, string>(p.Username));
|
||||||
|
|
||||||
|
// This specific cache key was introduced to fix an issue where the member username could not be the same as the member id, because the cache keys collided.
|
||||||
|
// This is done in a bit of a hacky way, because the cache key is created internally in the repository, but we need to clear it here.
|
||||||
|
// Ideally, we want to use a shared way of generating the key between this and the repository.
|
||||||
|
// Additionally, the RepositoryCacheKeys actually caches the string to avoid re-allocating memory; we would like to also use this in the repository
|
||||||
|
// See:
|
||||||
|
// https://github.com/umbraco/Umbraco-CMS/pull/17350
|
||||||
|
// https://github.com/umbraco/Umbraco-CMS/pull/17815
|
||||||
|
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, string>(CacheKeys.MemberUserNameCachePrefix + p.Username));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ public class MemberRepository : ContentRepositoryBase<int, IMember, MemberReposi
|
|||||||
private readonly ITagRepository _tagRepository;
|
private readonly ITagRepository _tagRepository;
|
||||||
private bool _passwordConfigInitialized;
|
private bool _passwordConfigInitialized;
|
||||||
private string? _passwordConfigJson;
|
private string? _passwordConfigJson;
|
||||||
private const string UsernameCacheKey = "uRepo_userNameKey+";
|
|
||||||
|
|
||||||
public MemberRepository(
|
public MemberRepository(
|
||||||
IScopeAccessor scopeAccessor,
|
IScopeAccessor scopeAccessor,
|
||||||
@@ -327,7 +326,7 @@ public class MemberRepository : ContentRepositoryBase<int, IMember, MemberReposi
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IMember? GetByUsername(string? username) =>
|
public IMember? GetByUsername(string? username) =>
|
||||||
_memberByUsernameCachePolicy.GetByUserName(UsernameCacheKey, username, PerformGetByUsername, PerformGetAllByUsername);
|
_memberByUsernameCachePolicy.GetByUserName(CacheKeys.MemberUserNameCachePrefix, username, PerformGetByUsername, PerformGetAllByUsername);
|
||||||
|
|
||||||
public int[] GetMemberIds(string[] usernames)
|
public int[] GetMemberIds(string[] usernames)
|
||||||
{
|
{
|
||||||
@@ -609,7 +608,7 @@ public class MemberRepository : ContentRepositoryBase<int, IMember, MemberReposi
|
|||||||
|
|
||||||
protected override void PersistDeletedItem(IMember entity)
|
protected override void PersistDeletedItem(IMember entity)
|
||||||
{
|
{
|
||||||
_memberByUsernameCachePolicy.DeleteByUserName(UsernameCacheKey, entity.Username);
|
_memberByUsernameCachePolicy.DeleteByUserName(CacheKeys.MemberUserNameCachePrefix, entity.Username);
|
||||||
base.PersistDeletedItem(entity);
|
base.PersistDeletedItem(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -943,7 +942,7 @@ public class MemberRepository : ContentRepositoryBase<int, IMember, MemberReposi
|
|||||||
|
|
||||||
OnUowRefreshedEntity(new MemberRefreshNotification(entity, new EventMessages()));
|
OnUowRefreshedEntity(new MemberRefreshNotification(entity, new EventMessages()));
|
||||||
|
|
||||||
_memberByUsernameCachePolicy.DeleteByUserName(UsernameCacheKey, entity.Username);
|
_memberByUsernameCachePolicy.DeleteByUserName(CacheKeys.MemberUserNameCachePrefix, entity.Username);
|
||||||
|
|
||||||
entity.ResetDirtyProperties();
|
entity.ResetDirtyProperties();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user