Browse Source

System admin can edit any user profile

pull/50/head
Nafies Luthfi 6 years ago
parent
commit
92267d5284
  1. 12
      app/Helpers/functions.php
  2. 2
      app/Policies/UserPolicy.php
  3. 25
      tests/Unit/Policies/UserPolicyTest.php

12
app/Helpers/functions.php

@ -58,3 +58,15 @@ function userPhotoPath($photoPath, $genderId)
return asset('images/icon_user_'.$genderId.'.png');
}
function is_system_admin(User $user)
{
if ($user->email) {
if (env('SYSTEM_ADMIN_EMAILS')) {
$adminEmails = explode(';', env('SYSTEM_ADMIN_EMAILS'));
return in_array($user->email, $adminEmails);
}
}
return false;
}

2
app/Policies/UserPolicy.php

@ -18,7 +18,7 @@ class UserPolicy
*/
public function edit(User $user, User $editableUser)
{
return $editableUser->id == $user->id || $editableUser->manager_id == $user->id;
return $editableUser->id == $user->id || $editableUser->manager_id == $user->id || is_system_admin($user);
}
/**

25
tests/Unit/Policies/UserPolicyTest.php

@ -3,8 +3,9 @@
namespace Tests\Unit\Policies;
use App\User;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Str;
use Tests\TestCase;
class UserPolicyTest extends TestCase
{
@ -13,10 +14,32 @@ class UserPolicyTest extends TestCase
/** @test */
public function manager_can_edit_users_profile()
{
$otherUserManagerId = Str::random();
$manager = factory(User::class)->create();
$user = factory(User::class)->create(['manager_id' => $manager->id]);
$otherUser = factory(User::class)->create(['manager_id' => $otherUserManagerId]);
$this->assertTrue($manager->can('edit', $user));
$this->assertFalse($manager->can('edit', $otherUser));
}
/** @test */
public function admins_can_edit_any_user_profile()
{
$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('edit', $user));
$this->assertTrue($admin->can('edit', $otherUser));
$this->assertTrue($manager->can('edit', $user));
$this->assertFalse($manager->can('edit', $otherUser));
}
/** @test */

Loading…
Cancel
Save