Cannot migrate from Umbraco 7 to Umbraco 8 with v8.14+ because userId 0 is skipped over (#10622)
This commit is contained in:
@@ -28,6 +28,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
{
|
||||
private readonly IMapperCollection _mapperCollection;
|
||||
private readonly IGlobalSettings _globalSettings;
|
||||
private readonly IRuntimeState _runtimeState;
|
||||
private string _passwordConfigJson;
|
||||
private bool _passwordConfigInitialized;
|
||||
|
||||
@@ -41,19 +42,22 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
/// A dictionary specifying the configuration for user passwords. If this is null then no password configuration will be persisted or read.
|
||||
/// </param>
|
||||
/// <param name="globalSettings"></param>
|
||||
public UserRepository(IScopeAccessor scopeAccessor, AppCaches appCaches, ILogger logger, IMapperCollection mapperCollection, IGlobalSettings globalSettings)
|
||||
/// <param name="runtimeState"></param>
|
||||
public UserRepository(IScopeAccessor scopeAccessor, AppCaches appCaches, ILogger logger, IMapperCollection mapperCollection, IGlobalSettings globalSettings, IRuntimeState runtimeState)
|
||||
: base(scopeAccessor, appCaches, logger)
|
||||
{
|
||||
_mapperCollection = mapperCollection;
|
||||
_globalSettings = globalSettings;
|
||||
_runtimeState = runtimeState;
|
||||
}
|
||||
|
||||
// for tests
|
||||
internal UserRepository(IScopeAccessor scopeAccessor, AppCaches appCaches, ILogger logger, IMapperCollection mapperCollection, IDictionary<string, string> passwordConfig, IGlobalSettings globalSettings)
|
||||
internal UserRepository(IScopeAccessor scopeAccessor, AppCaches appCaches, ILogger logger, IMapperCollection mapperCollection, IDictionary<string, string> passwordConfig, IGlobalSettings globalSettings, IRuntimeState runtimeState)
|
||||
: base(scopeAccessor, appCaches, logger)
|
||||
{
|
||||
_mapperCollection = mapperCollection;
|
||||
_globalSettings = globalSettings;
|
||||
_runtimeState = runtimeState;
|
||||
_passwordConfigJson = JsonConvert.SerializeObject(passwordConfig);
|
||||
_passwordConfigInitialized = true;
|
||||
}
|
||||
@@ -86,9 +90,21 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
|
||||
// This will never resolve to a user, yet this is asked
|
||||
// for all of the time (especially in cases of members).
|
||||
// Don't issue a SQL call for this, we know it will not exist.
|
||||
if (id == default || id < -1)
|
||||
if (_runtimeState.Level == RuntimeLevel.Upgrade)
|
||||
{
|
||||
return null;
|
||||
// when upgrading people might come from version 7 where user 0 was the default,
|
||||
// only in upgrade mode do we want to fetch the user of Id 0
|
||||
if (id < -1)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (id == default || id < -1)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
var sql = SqlContext.Sql()
|
||||
|
||||
@@ -17,6 +17,7 @@ using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
using System;
|
||||
using Umbraco.Core.Persistence.Dtos;
|
||||
using Umbraco.Tests.Components;
|
||||
|
||||
namespace Umbraco.Tests.Persistence.Repositories
|
||||
{
|
||||
@@ -67,7 +68,7 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
private UserRepository CreateRepository(IScopeProvider provider)
|
||||
{
|
||||
var accessor = (IScopeAccessor) provider;
|
||||
var repository = new UserRepository(accessor, AppCaches.Disabled, Logger, Mappers, TestObjects.GetGlobalSettings());
|
||||
var repository = new UserRepository(accessor, AppCaches.Disabled, Logger, Mappers, TestObjects.GetGlobalSettings(), ComponentTests.MockRuntimeState(RuntimeLevel.Run));
|
||||
return repository;
|
||||
}
|
||||
|
||||
@@ -85,8 +86,8 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
var user = MockedUser.CreateUser();
|
||||
using (var scope = provider.CreateScope(autoComplete: true))
|
||||
{
|
||||
var repository = CreateRepository(provider);
|
||||
repository.Save(user);
|
||||
var repository = CreateRepository(provider);
|
||||
repository.Save(user);
|
||||
}
|
||||
|
||||
using (var scope = provider.CreateScope(autoComplete: true))
|
||||
@@ -253,7 +254,7 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
|
||||
var id = user.Id;
|
||||
|
||||
var repository2 = new UserRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, Mock.Of<IMapperCollection>(),TestObjects.GetGlobalSettings());
|
||||
var repository2 = new UserRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, Mock.Of<IMapperCollection>(), TestObjects.GetGlobalSettings(), ComponentTests.MockRuntimeState(RuntimeLevel.Run));
|
||||
|
||||
repository2.Delete(user);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user