Dalam artikel ini kita akan belajar untuk mencoba impersonate user, kita akan mulai step by step disini, dari kita buat user dan juga seorang admin.
Dalam artikel ini kita akan belajar untuk mencoba impersonate user, kita akan mulai step by step disini, dari kita buat user dan juga seorang admin.
Pertama, mari kita lakukan instalasi laravel nya sekalian dengan breeze nya.
laravel new project --breeze
Silakan pilih stack menggunakan blade saja agar kita bisa lebih general disini.
Setelah itu, mari kita lakukan instalasi package yang dibuat oleh 404labfr dengan perintah berikut:
composer require lab404/laravel-impersonate
Kemudian setelah itu, buka app/Models/User.php
untuk memasukkan trait yang telah diberikannya seperti:
use Lab404\Impersonate\Models\Impersonate;
class User extends Authenticatable
{
use Impersonate;
//...
}
Untuk mengimplementasikan package ini ada 2 pilihan. Bisa dengan membuat controller sendiri, atau menggunakan built-in controller dari package ini.
Untuk jelas saja, jika Anda ingin menggunakan controller sendiri, pastinya Anda akan membuat route sendiri juga, dan itu pasti repot. Makanya ada opsi yang kedua, namun jika Anda tetap ingin menggunakan controller sendiri, entah itu karena ada api tambahan yang Anda ingin jalankan. Maka Anda bisa pakai api seperti berikut:
Auth::user()->impersonate($other_user);
Itu adalah kode untuk mengimpersonate user, nah kemudian jika ingin keluar dari impersonating nya bisa dengan:
Auth::user()->leaveImpersonation();
Nah, jika Anda ingin menggunakan built-in controller, Anda bisa masukkan route nya langsung di routes/web.php
seperti berikut:
Route::impersonate();
Dengan begitu, jika Anda lihat list route nya dengan menjalankan perintah:
php artisan route:list
Maka route untuk impersonate.leave
dan impersonate
akan sudah ada di list tersebut.
Mungkin Anda ingin menentukan, role apa saja yang boleh mengimpersonate user, entah itu misalnya admin, moderator dan sebagainya. Untuk itu, kita bisa tambahkan itu pada model User seperti:
use Lab404\Impersonate\Models\Impersonate;
class User extends Authenticatable
{
use Impersonate;
// ...
public function isAdmin(): bool
{
return $this->id === 1;
}
public function canImpersonate(): bool
{
return $this->isAdmin();
}
}
Atau mungkin sebaliknya, semua boleh di impersonate kecuali seoarang Admin, maka untuk itu kita bisa tambahkan method canBeImpersonated
seperti berikut:
use Lab404\Impersonate\Models\Impersonate;
class User extends Authenticatable
{
use Impersonate;
// ...
public function isAdmin(): bool
{
return $this->id === 1;
}
public function canImpersonate(): bool
{
return $this->isAdmin();
}
public function canBeImpersonated(): bool
{
return ! $this->isAdmin();
}
}
Sekarang, Anda bisa buka tinker dengan menjalakan php artisan tinker
, kemudian lakukan factory untuk user seperti:
> App\Models\User::factory(10)->create();
Untuk masalah Admin, karena kita gk mempunyai setup nya, jadi kita akan menganggap bahwa admin adalah user yang mempunyai id = 1
. Sesuai dari logic yang kita buat pada model user tadi.
Sekarang, Anda bisa jalankan php artisan serve
(jika Anda tidak memakai valet). Kemudian Anda bisa login dengan dulu dengan user yang telah kita buat pada tinker tadi. Pastikan Anda sedang meloginkan user yang mempunyai id 1, karena dalam konteks di atas tadi, kita hanya mengizinkan admin untuk mengimpersonate user.
Setelah Anda login, Anda bisa kunjungi url 127.0.0.1:8000/impersonate/take/2
, 2
itu adalah id dari user yang ingin kita impersonate. Jika Anda sudah mengunjungi url itu, maka harusnya Anda akan sudah login dengan user yang mempunyai id 2
.
Sekarang kita akan langsung belajar bagaimana cara keluar dari impersonate itu, harusnya ini akan sangat mudah.
Buka file navigation.blade.php
, dan silakan tambahkan kode tepat sebelum tag nav
seperti:
@impersonating($guard = null)
<a href="{{ route('impersonate.leave') }}" class='bg-blue-600 text-white px-4 py-3 text-center block font-medium'>
Leave impersonation
</a>
@endImpersonating
<nav x-data="{ open: false }" class="bg-white border-b border-gray-100">
Harusnya sekarang tampilannya kurang lebih akan seperti ini:
Jika sekarang kita klik tombol biru di atas navigasi itu, maka harusnya kita sudah keluar dari user yang sedang kita impersonate.
Semoga artikel ini bermanfaat ya, jika Anda ingin mempelajari lebih lanjut tentang package ini. Maka Anda bisa lihat langsung disini. Saya Irsyad, see you.
Let's start living like no one can help us in any event, so that when we are helped in certain times, it becomes a plus in itself.