From b1d11fca6499365313e3b8b49c1806a8a2d5a788 Mon Sep 17 00:00:00 2001 From: Zeegaan <70372949+Zeegaan@users.noreply.github.com> Date: Thu, 19 Aug 2021 08:47:32 +0200 Subject: [PATCH 1/3] Removed obsolete property from User --- src/Umbraco.Core/Models/Membership/IUser.cs | 16 --------- src/Umbraco.Core/Models/Membership/User.cs | 35 ------------------- .../Persistence/Factories/UserFactory.cs | 9 +---- .../Repositories/Implement/UserRepository.cs | 11 ------ 4 files changed, 1 insertion(+), 70 deletions(-) diff --git a/src/Umbraco.Core/Models/Membership/IUser.cs b/src/Umbraco.Core/Models/Membership/IUser.cs index a36b155da5..15a83d2758 100644 --- a/src/Umbraco.Core/Models/Membership/IUser.cs +++ b/src/Umbraco.Core/Models/Membership/IUser.cs @@ -46,21 +46,5 @@ namespace Umbraco.Cms.Core.Models.Membership /// A Json blob stored for recording tour data for a user /// string TourData { get; set; } - - /// - /// Returns an item from the user instance's cache - /// - /// - /// - /// - T FromUserCache(string cacheKey) where T : class; - - /// - /// Puts an item in the user instance's cache - /// - /// - /// - /// - void ToUserCache(string cacheKey, T vals) where T : class; } } diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index 47de82487f..34db13e75b 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -366,41 +366,6 @@ namespace Umbraco.Cms.Core.Models.Membership } } - public T FromUserCache(string cacheKey) - where T : class - { - lock (_additionalDataLock) - { - return AdditionalData.TryGetValue(cacheKey, out var data) - ? data as T - : null; - } - } - - public void ToUserCache(string cacheKey, T vals) - where T : class - { - lock (_additionalDataLock) - { - AdditionalData[cacheKey] = vals; - } - } - - [IgnoreDataMember] - [DoNotClone] - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("This should not be used, it's currently used for only a single edge case - should probably be removed for netcore")] - internal IDictionary AdditionalData - { - get - { - lock (_additionalDataLock) - { - return _additionalData ?? (_additionalData = new Dictionary()); - } - } - } - protected override void PerformDeepClone(object clone) { base.PerformDeepClone(clone); diff --git a/src/Umbraco.Infrastructure/Persistence/Factories/UserFactory.cs b/src/Umbraco.Infrastructure/Persistence/Factories/UserFactory.cs index 1bf32075eb..87124a2d0d 100644 --- a/src/Umbraco.Infrastructure/Persistence/Factories/UserFactory.cs +++ b/src/Umbraco.Infrastructure/Persistence/Factories/UserFactory.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models.Membership; @@ -38,13 +38,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Factories user.InvitedDate = dto.InvitedDate; user.TourData = dto.TourData; - // we should never get user with ID zero from database, except - // when upgrading from v7 - mark that user so that we do not - // save it back to database (as that would create a *new* user) - // see also: UserRepository.PersistNewItem - if (dto.Id == 0) - user.ToUserCache("IS_V7_ZERO", "true"); - // reset dirty initial properties (U4-1946) user.ResetDirtyProperties(false); diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs index d83be68732..cc61a44a44 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs @@ -444,17 +444,6 @@ ORDER BY colName"; protected override void PersistNewItem(IUser entity) { - // the use may have no identity, ie ID is zero, and be v7 super - // user - then it has been marked - and we must not persist it - // as new, as we do not want to create a new user - instead, persist - // it as updated - // see also: UserFactory.BuildEntity - if (entity.FromUserCache("IS_V7_ZERO") != null) - { - PersistUpdatedItem(entity); - return; - } - entity.AddingEntity(); // ensure security stamp if missing From c2c222687fbd95634a9a22459422b33db68b6ee4 Mon Sep 17 00:00:00 2001 From: Zeegaan <70372949+Zeegaan@users.noreply.github.com> Date: Fri, 20 Aug 2021 12:13:30 +0200 Subject: [PATCH 2/3] Removed obsolete backing field and lock --- src/Umbraco.Core/Models/Membership/User.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index 34db13e75b..05dd818e04 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -119,8 +119,6 @@ namespace Umbraco.Cms.Core.Models.Membership private DateTime _lastPasswordChangedDate; private DateTime _lastLoginDate; private DateTime _lastLockoutDate; - private IDictionary _additionalData; - private object _additionalDataLock = new object(); //Custom comparer for enumerable private static readonly DelegateEqualityComparer> IntegerEnumerableComparer = From b272afa0abffe05ccc26179b45f6c492550aabae Mon Sep 17 00:00:00 2001 From: Zeegaan <70372949+Zeegaan@users.noreply.github.com> Date: Fri, 20 Aug 2021 12:19:14 +0200 Subject: [PATCH 3/3] removed the cloning of additonalData from PerformDeepClone --- src/Umbraco.Core/Models/Membership/User.cs | 23 ---------------------- 1 file changed, 23 deletions(-) diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index 05dd818e04..5525532f9d 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -373,29 +373,6 @@ namespace Umbraco.Cms.Core.Models.Membership //manually clone the start node props clonedEntity._startContentIds = _startContentIds.ToArray(); clonedEntity._startMediaIds = _startMediaIds.ToArray(); - - // this value has been cloned and points to the same object - // which obviously is bad - needs to point to a new object - clonedEntity._additionalDataLock = new object(); - - if (_additionalData != null) - { - // clone._additionalData points to the same dictionary, which is bad, because - // changing one clone impacts all of them - so we need to reset it with a fresh - // dictionary that will contain the same values - and, if some values are deep - // cloneable, they should be deep-cloned too - var cloneAdditionalData = clonedEntity._additionalData = new Dictionary(); - - lock (_additionalDataLock) - { - foreach (var kvp in _additionalData) - { - var deepCloneable = kvp.Value as IDeepCloneable; - cloneAdditionalData[kvp.Key] = deepCloneable == null ? kvp.Value : deepCloneable.DeepClone(); - } - } - } - //need to create new collections otherwise they'll get copied by ref clonedEntity._userGroups = new HashSet(_userGroups); clonedEntity._allowedSections = _allowedSections != null ? new List(_allowedSections) : null;