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;