Skip to content

Commit 66be67b

Browse files
committed
Moving masquerade function and adding test
1 parent 582794f commit 66be67b

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

code/Extensions/MasqueradeMemberExtension.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,14 @@ public function canMasquerade($member = null)
2222
return Permission::check('ADMIN', 'any', $member);
2323
}
2424

25+
public function masquerade()
26+
{
27+
// don't use $member->logIn() because it triggers tracking and breaks remember me tokens, etc.
28+
$sessionData = Session::get_all();
29+
Session::clear_all();
30+
Session::set("loggedInAs", $this->getOwner()->ID);
31+
Session::set('Masquerade.Old', $sessionData);
32+
return $this->getOwner();
33+
}
34+
2535
}

code/forms/gridfield/MasqueradeGridFieldDetailForm_ItemRequest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,11 @@ class MasqueradeGridFieldDetailForm_ItemRequest extends GridFieldDetailForm_Item
99
public function masquerade()
1010
{
1111
$member = $this->getRecord();
12-
if (!$member instanceof Member || !$member->canMasquerade()) {
12+
if (!$member->hasMethod('canMasquerade') || !$member->hasMethod('masquerade') || !$member->canMasquerade()) {
1313
Security::permissionFailure($this->getController());
1414
return;
1515
}
16-
// don't use $member->logIn() because it triggers tracking and breaks remember me tokens, etc.
17-
$sessionData = Session::get_all();
18-
Session::clear_all();
19-
Session::set("loggedInAs", $member->ID);
20-
Session::set('Masquerade.Old', $sessionData);
16+
$member->masquerade();
2117
$this->getController()->redirect(Director::absoluteBaseURL());
2218
}
2319

tests/MasqueradeMemberTest.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ public function testCanMasquerade()
88
{
99
$this->logInWithPermission('ADMIN');
1010
$admin = Member::currentUser();
11-
1211
$member = $this->objFromFixture('Member', 'user');
1312

1413
//added function correctly
@@ -39,4 +38,18 @@ public function testCanMasquerade()
3938
$this->assertFalse($admin->canMasquerade());
4039
}
4140

41+
public function testMasquerade()
42+
{
43+
$this->logInWithPermission('ADMIN');
44+
$admin = Member::currentUser();
45+
$member = $this->objFromFixture('Member', 'user');
46+
47+
$this->assertEquals($admin->ID, Session::get('loggedInAs'));
48+
49+
$member->masquerade();
50+
51+
$this->assertEquals($member->ID, Session::get('loggedInAs'));
52+
$this->assertEquals($admin->ID, Session::get('Masquerade.Old.loggedInAs'));
53+
}
54+
4255
}

0 commit comments

Comments
 (0)