Browse Source

Fixed backup.

pull/320/head
Sebastian Stehle 7 years ago
parent
commit
41e81c7b9d
  1. 13
      src/Squidex.Domain.Apps.Entities/Apps/BackupApps.cs
  2. 2
      src/Squidex.Domain.Apps.Entities/Apps/Commands/AssignContributor.cs
  3. 2
      src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppContributors.cs
  4. 1
      src/Squidex.Domain.Apps.Entities/Backup/RestoreGrain.cs
  5. 9
      src/Squidex.Domain.Apps.Entities/Rules/BackupRules.cs
  6. 10
      src/Squidex.Domain.Apps.Entities/Schemas/BackupSchemas.cs

13
src/Squidex.Domain.Apps.Entities/Apps/BackupApps.cs

@ -11,19 +11,17 @@ using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Orleans;
using Squidex.Domain.Apps.Entities.Apps.Indexes;
using Squidex.Domain.Apps.Entities.Apps.State;
using Squidex.Domain.Apps.Entities.Backup;
using Squidex.Domain.Apps.Events;
using Squidex.Domain.Apps.Events.Apps;
using Squidex.Infrastructure;
using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.States;
using Squidex.Shared.Users;
namespace Squidex.Domain.Apps.Entities.Apps
{
public sealed class BackupApps : BackupHandlerWithStore
public sealed class BackupApps : BackupHandler
{
private const string UsersFile = "Users.json";
private const string SettingsFile = "Settings.json";
@ -38,8 +36,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
public override string Name { get; } = "Apps";
public BackupApps(IStore<Guid> store, IGrainFactory grainFactory, IUserResolver userResolver)
: base(store)
public BackupApps(IGrainFactory grainFactory, IUserResolver userResolver)
{
Guard.NotNull(grainFactory, nameof(grainFactory));
Guard.NotNull(userResolver, nameof(userResolver));
@ -160,10 +157,6 @@ namespace Squidex.Domain.Apps.Entities.Apps
{
userMapping[kvp.Key] = new RefToken(RefTokenType.Subject, user.Id);
}
else
{
userMapping[kvp.Key] = actor;
}
}
}
@ -197,8 +190,6 @@ namespace Squidex.Domain.Apps.Entities.Apps
public override async Task CompleteRestoreAsync(Guid appId, BackupReader reader)
{
await RebuildAsync<AppState, AppGrain>(appId, (e, s) => s.Apply(e));
await appsByNameIndex.AddAppAsync(appId, appName);
foreach (var user in contributors)

2
src/Squidex.Domain.Apps.Entities/Apps/Commands/AssignContributor.cs

@ -13,6 +13,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Commands
{
public string ContributorId { get; set; }
public bool FromRestore { get; set; }
public AppContributorPermission Permission { get; set; }
}
}

2
src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppContributors.cs

@ -45,7 +45,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
command.ContributorId = user.Id;
if (string.Equals(command.ContributorId, command.Actor?.Identifier, StringComparison.OrdinalIgnoreCase))
if (string.Equals(command.ContributorId, command.Actor?.Identifier, StringComparison.OrdinalIgnoreCase) && !command.FromRestore)
{
throw new SecurityException("You cannot change your own permission.");
}

1
src/Squidex.Domain.Apps.Entities/Backup/RestoreGrain.cs

@ -251,6 +251,7 @@ namespace Squidex.Domain.Apps.Entities.Backup
Actor = actor,
AppId = CurrentJob.AppId,
ContributorId = actor.Identifier,
FromRestore = true,
Permission = AppContributorPermission.Developer
});
}

9
src/Squidex.Domain.Apps.Entities/Rules/BackupRules.cs

@ -12,24 +12,21 @@ using Orleans;
using Squidex.Domain.Apps.Entities.Backup;
using Squidex.Domain.Apps.Entities.Rules.Indexes;
using Squidex.Domain.Apps.Entities.Rules.Repositories;
using Squidex.Domain.Apps.Entities.Rules.State;
using Squidex.Domain.Apps.Events.Rules;
using Squidex.Infrastructure;
using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.States;
using Squidex.Infrastructure.Tasks;
namespace Squidex.Domain.Apps.Entities.Rules
{
public sealed class BackupRules : BackupHandlerWithStore
public sealed class BackupRules : BackupHandler
{
private readonly HashSet<Guid> ruleIds = new HashSet<Guid>();
private readonly IGrainFactory grainFactory;
public override string Name { get; } = "Rules";
public BackupRules(IStore<Guid> store, IGrainFactory grainFactory, IRuleEventRepository ruleEventRepository)
: base(store)
public BackupRules(IGrainFactory grainFactory, IRuleEventRepository ruleEventRepository)
{
Guard.NotNull(grainFactory, nameof(grainFactory));
Guard.NotNull(ruleEventRepository, nameof(ruleEventRepository));
@ -54,8 +51,6 @@ namespace Squidex.Domain.Apps.Entities.Rules
public override async Task RestoreAsync(Guid appId, BackupReader reader)
{
await RebuildManyAsync(ruleIds, id => RebuildAsync<RuleState, RuleGrain>(id, (e, s) => s.Apply(e)));
await grainFactory.GetGrain<IRulesByAppIndex>(appId).RebuildAsync(ruleIds);
}
}

10
src/Squidex.Domain.Apps.Entities/Schemas/BackupSchemas.cs

@ -7,22 +7,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Orleans;
using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Domain.Apps.Entities.Backup;
using Squidex.Domain.Apps.Entities.Schemas.Indexes;
using Squidex.Domain.Apps.Entities.Schemas.State;
using Squidex.Domain.Apps.Events.Schemas;
using Squidex.Infrastructure;
using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.States;
using Squidex.Infrastructure.Tasks;
namespace Squidex.Domain.Apps.Entities.Schemas
{
public sealed class BackupSchemas : BackupHandlerWithStore
public sealed class BackupSchemas : BackupHandler
{
private readonly HashSet<NamedId<Guid>> schemaIds = new HashSet<NamedId<Guid>>();
private readonly Dictionary<string, Guid> schemasByName = new Dictionary<string, Guid>();
@ -31,8 +28,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas
public override string Name { get; } = "Schemas";
public BackupSchemas(IStore<Guid> store, FieldRegistry fieldRegistry, IGrainFactory grainFactory)
: base(store)
public BackupSchemas(FieldRegistry fieldRegistry, IGrainFactory grainFactory)
{
Guard.NotNull(fieldRegistry, nameof(fieldRegistry));
Guard.NotNull(grainFactory, nameof(grainFactory));
@ -57,8 +53,6 @@ namespace Squidex.Domain.Apps.Entities.Schemas
public override async Task RestoreAsync(Guid appId, BackupReader reader)
{
await RebuildManyAsync(schemaIds.Select(x => x.Id), id => RebuildAsync<SchemaState, SchemaGrain>(id, (e, s) => s.Apply(e, fieldRegistry)));
await grainFactory.GetGrain<ISchemasByAppIndex>(appId).RebuildAsync(schemasByName);
}
}

Loading…
Cancel
Save