Browse Source

System admin can delete any user

pull/50/head
Nafies Luthfi 6 years ago
parent
commit
a37645fafa
  1. 2
      app/Policies/UserPolicy.php
  2. 22
      tests/Unit/Policies/UserPolicyTest.php

2
app/Policies/UserPolicy.php

@ -30,6 +30,6 @@ class UserPolicy
*/ */
public function delete(User $user, User $editableUser) public function delete(User $user, User $editableUser)
{ {
return $editableUser->manager_id == $user->id && $editableUser->id != $user->id;
return ($editableUser->manager_id == $user->id || is_system_admin($user)) && $editableUser->id != $user->id;
} }
} }

22
tests/Unit/Policies/UserPolicyTest.php

@ -53,10 +53,32 @@ class UserPolicyTest extends TestCase
/** @test */ /** @test */
public function manager_can_delete_a_user() public function manager_can_delete_a_user()
{ {
$otherUserManagerId = Str::random();
$manager = factory(User::class)->create(); $manager = factory(User::class)->create();
$user = factory(User::class)->create(['manager_id' => $manager->id]); $user = factory(User::class)->create(['manager_id' => $manager->id]);
$otherUser = factory(User::class)->create(['manager_id' => $otherUserManagerId]);
$this->assertTrue($manager->can('delete', $user));
$this->assertFalse($manager->can('delete', $otherUser));
}
/** @test */
public function admins_can_delete_any_user()
{
$adminEmail = 'admin@example.net';
$otherUserManagerId = Str::random();
putenv('SYSTEM_ADMIN_EMAILS='.$adminEmail);
$manager = factory(User::class)->create();
$admin = factory(User::class)->create(['email' => $adminEmail]);
$user = factory(User::class)->create(['manager_id' => $manager->id]);
$otherUser = factory(User::class)->create(['manager_id' => $otherUserManagerId]);
$this->assertTrue($admin->can('delete', $user));
$this->assertTrue($admin->can('delete', $otherUser));
$this->assertTrue($manager->can('delete', $user)); $this->assertTrue($manager->can('delete', $user));
$this->assertFalse($manager->can('delete', $otherUser));
} }
/** @test */ /** @test */

Loading…
Cancel
Save