From b9ea65283e33a0ffbbac1e28331a7fd972be7486 Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Fri, 16 Aug 2013 07:15:52 +0300 Subject: [PATCH] admin: impersonate --- ipf/admin/app.php | 1 + ipf/admin/views.php | 16 ++++++++++++++++ ipf/auth/models/User.php | 7 +++++++ 3 files changed, 24 insertions(+) diff --git a/ipf/admin/app.php b/ipf/admin/app.php index 0ef0999..9b87907 100644 --- a/ipf/admin/app.php +++ b/ipf/admin/app.php @@ -23,6 +23,7 @@ class IPF_Admin_App extends IPF_Application array('regex'=>'auth/user/([\w\_\-]+)/password/$#i', 'func'=>'IPF_Admin_Views_ChangePassword'), array('regex'=>'login/$#i', 'func'=>'IPF_Admin_Views_Login'), array('regex'=>'logout/$#i', 'func'=>'IPF_Admin_Views_Logout'), + array('regex'=>'auth/user/(\d+)/impersonate/$#', 'func'=>'IPF_Admin_Views_Impersonate'), ); } diff --git a/ipf/admin/views.php b/ipf/admin/views.php index 03c1f7e..0e8264f 100644 --- a/ipf/admin/views.php +++ b/ipf/admin/views.php @@ -313,6 +313,22 @@ function IPF_Admin_Views_Logout($request, $match) return IPF_Shortcuts::RenderToResponse('admin/logout.html', $context, $request); } +function IPF_Admin_Views_Impersonate($request, $match) +{ + $success_url = ''; + if (!empty($request->REQUEST['next'])) + $success_url = trim($request->REQUEST['next']); + if (!$success_url) + $success_url = IPF_HTTP_URL::urlForView('IPF_Admin_Views_Index'); + + if (!$request->user->isAnonymous() && $request->user->is_superuser) { + $user = IPF_Shortcuts::GetObjectOr404('User', $match[1]); + IPF_Auth_App::login($request, $user); + } + + return new IPF_HTTP_Response_Redirect($success_url); +} + function cmp($a, $b) { if ($a['name'] == $b['name']) diff --git a/ipf/auth/models/User.php b/ipf/auth/models/User.php index d6af705..640a5d6 100644 --- a/ipf/auth/models/User.php +++ b/ipf/auth/models/User.php @@ -170,6 +170,13 @@ class AdminUser extends IPF_Admin_Model $extra['model'] = $model_obj; return new IPFAuthAdminUserForm($data, $extra); } + + protected function objectTools($user) + { + return array( + 'impersonate' => IPF_HTTP_URL::urlForView('IPF_Admin_Views_Impersonate', array($user->id)), + ); + } } class User extends BaseUser -- 2.49.0