]> git.andy128k.dev Git - ipf.git/commitdiff
admin: impersonate
authorAndrey Kutejko <andy128k@gmail.com>
Fri, 16 Aug 2013 04:15:52 +0000 (07:15 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Fri, 16 Aug 2013 04:15:52 +0000 (07:15 +0300)
ipf/admin/app.php
ipf/admin/views.php
ipf/auth/models/User.php

index 0ef099915f0298461859c8cc5a9fd6a4a7cf4b9f..9b8790759ca9bfb4a8a9b459d43ff56185cf7a88 100644 (file)
@@ -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'),
         );
     }
 
index 03c1f7ec823599bcaadf4c782ae6660ece1edc81..0e8264fec992462fe7dfa87d7a369d112f2f5fa0 100644 (file)
@@ -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'])
index d6af705118a3caee30846c48cfc8450d40177b41..640a5d6ffb2f7a67b997907fcfe19d79a841c386 100644 (file)
@@ -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