diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidExtension.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidExtension.cs index 7687b9c31..f74b05589 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidExtension.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidExtension.cs @@ -5,6 +5,8 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; +using System.Linq; using Fluid; using Fluid.Values; using Squidex.Shared.Users; @@ -15,7 +17,29 @@ namespace Squidex.Domain.Apps.Core.Templates.Extensions { public void RegisterGlobalTypes(IMemberAccessStrategy memberAccessStrategy) { - FluidValue.SetTypeMapping(x => new UserFluidValue(x)); + memberAccessStrategy.Register((user, name) => + { + switch (name) + { + case "id": + return new StringValue(user.Id); + case "email": + return new StringValue(user.Email); + case "name": + return new StringValue(user.DisplayName()); + default: + { + var claim = user.Claims.FirstOrDefault(x => string.Equals(name, x.Type, StringComparison.OrdinalIgnoreCase)); + + if (claim != null) + { + return new StringValue(claim.Value); + } + + return NilValue.Instance; + } + } + }); } } } diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidValue.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidValue.cs deleted file mode 100644 index 5df2aae82..000000000 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Templates/Extensions/UserFluidValue.cs +++ /dev/null @@ -1,75 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Encodings.Web; -using Fluid; -using Fluid.Values; -using Squidex.Shared.Users; - -namespace Squidex.Domain.Apps.Core.Templates.Extensions -{ - public sealed class UserFluidValue : FluidValue - { - private readonly IUser value; - - public override FluidValues Type { get; } = FluidValues.Object; - - public UserFluidValue(IUser value) - { - this.value = value; - } - - protected override FluidValue GetValue(string name, TemplateContext context) - { - switch (name) - { - case "id": - return Create(value.Id); - case "email": - return Create(value.Email); - case "name": - return Create(value.DisplayName()); - default: - return Create(value.Claims.FirstOrDefault(x => string.Equals(name, x.Type, StringComparison.OrdinalIgnoreCase))?.Value); - } - } - - public override bool Equals(FluidValue other) - { - return other is UserFluidValue user && user.value.Id == value.Id; - } - - public override bool ToBooleanValue() - { - return true; - } - - public override decimal ToNumberValue() - { - return 0; - } - - public override object ToObjectValue() - { - return new UserFluidValue(value); - } - - public override string ToStringValue() - { - return value.Id; - } - - public override void WriteTo(TextWriter writer, TextEncoder encoder, CultureInfo cultureInfo) - { - writer.Write(value.Id); - } - } -}