From 89539c165ee2f654c23afe513313f61c727d4e07 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 30 Oct 2018 16:22:12 +0100 Subject: [PATCH] Bugfix in UI when user has a single permission. --- .../PubSubExtensions.cs | 25 ++++++++++++------- .../app/shared/services/auth.service.ts | 2 ++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Squidex.Infrastructure/PubSubExtensions.cs b/src/Squidex.Infrastructure/PubSubExtensions.cs index 5889f790f..15264c74b 100644 --- a/src/Squidex.Infrastructure/PubSubExtensions.cs +++ b/src/Squidex.Infrastructure/PubSubExtensions.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using System.Threading; using System.Threading.Tasks; #pragma warning disable 4014 @@ -46,7 +47,7 @@ namespace Squidex.Infrastructure IDisposable subscription = null; try { - var receiveTask = new TaskCompletionSource(); + var receiveTask = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); subscription = pubsub.Subscribe>(response => { @@ -58,15 +59,21 @@ namespace Squidex.Infrastructure Task.Run(() => pubsub.Publish(request, self)); - var firstTask = await Task.WhenAny(receiveTask.Task, Task.Delay(timeout)); - - if (firstTask.Id != receiveTask.Task.Id) - { - throw new TaskCanceledException(); - } - else + using (var cts = new CancellationTokenSource()) { - return await receiveTask.Task; + var delayTask = Task.Delay(timeout, cts.Token); + + var resultTask = await Task.WhenAny(receiveTask.Task, delayTask); + if (resultTask == delayTask) + { + throw new TaskCanceledException(); + } + else + { + cts.Cancel(); + + return await receiveTask.Task; + } } } finally diff --git a/src/Squidex/app/shared/services/auth.service.ts b/src/Squidex/app/shared/services/auth.service.ts index 997027056..bb808dc3e 100644 --- a/src/Squidex/app/shared/services/auth.service.ts +++ b/src/Squidex/app/shared/services/auth.service.ts @@ -56,6 +56,8 @@ export class Profile { if (Types.isArrayOfString(permissions)) { this.permissions = permissions.map(x => new Permission(x)); + } else if (Types.isString(permissions)) { + this.permissions = [new Permission(permissions)]; } else { this.permissions = []; }