From 93654de9c2b2ab309d8359bc16f97bcf4a7fec0e Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Wed, 6 Jul 2022 13:33:12 +0200 Subject: [PATCH] Update GetLanguagePermissions to pull out proper backofficeUser if possible --- .../Models/Mapping/ContentVariantMapper.cs | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Core/Models/Mapping/ContentVariantMapper.cs b/src/Umbraco.Core/Models/Mapping/ContentVariantMapper.cs index 0eb19fb431..5441320b0f 100644 --- a/src/Umbraco.Core/Models/Mapping/ContentVariantMapper.cs +++ b/src/Umbraco.Core/Models/Mapping/ContentVariantMapper.cs @@ -218,12 +218,23 @@ public class ContentVariantMapper { context.Items.TryGetValue("CurrentUser", out var currentBackofficeUser); - if (currentBackofficeUser is not IUser currentIUserBackofficeUser) + IUser? currentUser = null; + + if (currentBackofficeUser is IUser currentIUserBackofficeUser) + { + currentUser = currentIUserBackofficeUser; + } + else if(_backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser is not null) + { + currentUser = _backOfficeSecurityAccessor.BackOfficeSecurity.CurrentUser; + } + + if (currentUser is null) { return Enumerable.Empty(); } - IEnumerable userGroups = currentIUserBackofficeUser.Groups; + IEnumerable userGroups = currentUser.Groups; // Map allowed actions var hasAccess = false; @@ -274,14 +285,11 @@ public class ContentVariantMapper } // A bit of a mess, but we need to ensure that all the required values are here AND that they're the right type. - if (context.Items.TryGetValue("CurrentUser", out var userObject) && - context.Items.TryGetValue("Permissions", out var permissionsObject) && - userObject is IUser currentUser && - permissionsObject is Dictionary permissionsDict) + if (context.Items.TryGetValue("Permissions", out var permissionsObject) && permissionsObject is Dictionary permissionsDict) { // If we already have permissions for a given path, // and the current user is the same as was used to generate the permissions, return the stored permissions. - if (currentIUserBackofficeUser.Id == currentUser.Id && + if (_backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.Id == currentUser.Id && permissionsDict.TryGetValue(path, out EntityPermissionSet? permissions)) { return permissions.GetAllPermissions(); @@ -292,6 +300,6 @@ public class ContentVariantMapper // with the IUmbracoContextAccessor. In the meantime, if used outside of a web app this will throw a null // reference exception :( - return _userService.GetPermissionsForPath(currentIUserBackofficeUser, path).GetAllPermissions(); + return _userService.GetPermissionsForPath(currentUser, path).GetAllPermissions(); } }