Share
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.
Instalasi
Pertama, mari kita lakukan instalasi laravel nya sekalian dengan breeze nya.
laravel new project --breeze
bashCopy
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
bashCopy
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; //... }
phpCopy
Implementasi
Untuk mengimplementasikan package ini ada 2 pilihan. Bisa dengan membuat controller sendiri, atau menggunakan built-in controller dari package ini.
Controller Sendiri
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);
phpCopy
Itu adalah kode untuk mengimpersonate user, nah kemudian jika ingin keluar dari impersonating nya bisa dengan:
Auth::user()->leaveImpersonation();
phpCopy
Built-in Controller
Nah, jika Anda ingin menggunakan built-in controller, Anda bisa masukkan route nya langsung di routes/web.php
seperti berikut:
Route::impersonate();
phpCopy
Dengan begitu, jika Anda lihat list route nya dengan menjalankan perintah:
php artisan route:list
bashCopy
Maka route untuk impersonate.leave
dan impersonate
akan sudah ada di list tersebut.
Impersonation authorization
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(); } }
phpCopy
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(); } }
phpCopy
Mari Kita Coba
Sekarang, Anda bisa buka tinker dengan menjalakan php artisan tinker
, kemudian lakukan factory untuk user seperti:
> App\Models\User::factory(10)->create();
bashCopy
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">
htmlCopy
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.