Создайте плагин ManagerAuthAs на 2 события: OnHandleRequest и OnManagerPageBeforeRender.
Код плагина:
switch ($modx->event->name) {
case 'OnHandleRequest':
if (@$_GET['action'] === 'manager/auth_as') {
$auth_user_id = (int)$_GET['user_id'];
$auth_contexts = $modx->user->getSessionContexts();
if (!empty($auth_user_id) && !empty($auth_contexts['mgr']) && $modx->context->key !== 'mgr') {
if ($user = $modx->getObject('modUser', $auth_user_id)) {
$modx->user = $user;
$contexts = $modx->getIterator('modContext', ['key:!=' => 'mgr']);
foreach ($contexts as $context) {
$modx->user->addSessionContext($context->key);
$modx->getUser($context->key, true);
}
}
}
$modx->sendRedirect($modx->makeUrl($modx->getOption('site_start')));
}
break;
case 'OnManagerPageBeforeRender':
switch ($controller->config['controller']) {
case 'security/user':
$controller->addHtml("
<script type='text/javascript'>
Ext.ComponentMgr.onAvailable('modx-panel-users', function () {
Ext.override(MODx.grid.User, {
getMenu: MODx.grid.User.prototype.getMenu.createSequence(function (grid, rowIndex) {
var data = grid.getStore().getAt(rowIndex).data;
if (!data.active || data.blocked) {
return;
}
this.addContextMenuItem(['-', {
text: 'Авторизоваться',
handler: function () {
window.open(MODx.config.site_url + '?action=manager/auth_as&user_id=' + data.id)
}, scope: this
}])
})
})
});
</script>
");
break;
}
break;
}