From 857d42101e1955cd0cd8933360796bd4a802a5c0 Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 24 Aug 2021 14:14:36 -0600 Subject: [PATCH] Added global notice to backend when the user is being impersonated --- modules/backend/assets/css/winter.css | 3 +++ modules/backend/lang/en/lang.php | 2 +- modules/backend/layouts/default.htm | 17 +++++++++++++++++ modules/backend/models/User.php | 13 ++++++++----- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/modules/backend/assets/css/winter.css b/modules/backend/assets/css/winter.css index aa81af624..2f190130d 100644 --- a/modules/backend/assets/css/winter.css +++ b/modules/backend/assets/css/winter.css @@ -586,6 +586,9 @@ body {font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sa .control-tabs.primary-tabs.tabs-no-inset >ul.nav-tabs, .control-tabs.primary-tabs.tabs-no-inset >div >ul.nav-tabs, .control-tabs.primary-tabs.tabs-no-inset >div >div >ul.nav-tabs {margin-left:0;margin-right:0} +.global-notice{position:sticky;top:0;display:flex;align-items:center;flex-wrap:wrap;gap:0.5em;justify-content:space-between;z-index:10500;background:#ab2a1c;color:#FFF;padding:0.5em 0.75em} +.global-notice .notice-icon{font-size:1.5em;vertical-align:bottom;display:inline-block;margin-right:.25em} +.global-notice .notice-text{display:inline-block;vertical-align:middle} .layout {display:table;table-layout:fixed;height:100%;width:100%} .layout >.layout-row {display:table-row;vertical-align:top;height:100%} .layout >.layout-row >.layout-cell {display:table-cell;vertical-align:top;height:100%} diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 46dee8b84..6fbafc7a9 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -47,7 +47,7 @@ return [ 'impersonate_confirm' => 'Are you sure you want to impersonate this user? You can revert to your original state by logging out.', 'impersonate_success' => 'You are now impersonating this user', 'impersonate_working' => 'Impersonating...', - 'impersonating' => 'Impersonating :full_name', + 'impersonating' => 'You are temporarily logged in as :impersonatee. Logs are still able to identify you as :impersonator', 'stop_impersonating' => 'Stop impersonating', 'unsuspend' => 'Unsuspend', 'unsuspend_confirm' => 'Are you sure you want to unsuspend this user?', diff --git a/modules/backend/layouts/default.htm b/modules/backend/layouts/default.htm index 022fc20bf..d984cb7c9 100644 --- a/modules/backend/layouts/default.htm +++ b/modules/backend/layouts/default.htm @@ -6,6 +6,23 @@
+ +
+
+ + + \BackendAuth::getImpersonator()->email, + 'impersonatee' => \BackendAuth::getUser()->email, + ])); ?> + +
+ + + +
+ +
diff --git a/modules/backend/models/User.php b/modules/backend/models/User.php index fda795f3b..b04d68159 100644 --- a/modules/backend/models/User.php +++ b/modules/backend/models/User.php @@ -227,13 +227,16 @@ class User extends UserBase $permissions = parent::getMergedPermissions(); // If the user is being impersonated filter out any permissions the impersonator doesn't have access to already - if (BackendAuth::isImpersonator() && $impersonator = BackendAuth::getImpersonator() && $impersonator !== $this) { - foreach ($permissions as $i => $permission) { - if (!$impersonator->hasAccess($permission)) { - unset($permissions[$i]); + if (BackendAuth::isImpersonator()) { + $impersonator = BackendAuth::getImpersonator(); + if ($impersonator && $impersonator !== $this) { + foreach ($permissions as $i => $permission) { + if (!$impersonator->hasAccess($permission)) { + unset($permissions[$i]); + } } + $this->mergedPermissions = $permissions; } - $this->mergedPermissions = $permissions; } }