Tutorial Fitur Role Management dengan Laravel 11, Filament 3, dan Spatie 6 Projek Toko Buah

Dalam era digital saat ini, perusahaan dituntut untuk memiliki website yang modern dan kaya fitur, terutama bagi mereka yang menjual jasa atau produk. Website bukan hanya menjadi etalase digital, tetapi juga memberikan nilai lebih kepada pengguna dengan menghadirkan fitur-fitur yang meningkatkan pengalaman mereka.

Misalnya, pengguna ingin merasakan kenyamanan saat melakukan transaksi, berinteraksi dengan konten, hingga mendapatkan layanan yang dipersonalisasi berdasarkan kebutuhan mereka. Di sinilah pentingnya sebuah sistem manajemen peran (role management) yang terstruktur dengan baik.

Dengan sistem manajemen peran, perusahaan dapat memberikan hak akses yang berbeda kepada pengguna berdasarkan perannya. Misalnya, admin memiliki akses penuh untuk mengelola produk, transaksi, dan pengguna, sementara pelanggan hanya bisa melihat dan membeli produk. Manajemen peran ini memberikan keamanan lebih pada sistem, memastikan bahwa hanya pihak yang berwenang yang dapat melakukan tindakan tertentu.

Laravel menjadi pilihan framework yang tepat untuk membangun website modern semacam ini. Dengan fitur-fitur yang lengkap dan komunitas developer yang besar, Laravel mempermudah proses development.

Selain itu, Laravel juga dikenal sebagai framework yang aman, cepat, dan scalable, sehingga cocok untuk membangun website dengan berbagai fitur kompleks. Ditambah dengan integrasi dengan Filament 3 sebagai admin panel yang kuat, dan Spatie 6 sebagai package untuk manajemen peran dan izin, proses development menjadi lebih cepat dan terorganisir.

Filament 3: Solusi Cepat untuk Membangun Dashboard Admin

Dalam proses pembuatan website modern, pengelolaan konten dan data di belakang layar menjadi sangat penting, terutama bagi admin yang perlu mengelola produk, transaksi, atau pengguna. Untuk itu, dibutuhkan sebuah dashboard admin yang mudah digunakan dan fungsional.

Filament 3 hadir sebagai solusi cepat bagi developer yang ingin membangun dashboard admin dengan lebih efisien. Package ini dirancang khusus untuk Laravel dan memudahkan proses pembuatan dashboard yang interaktif, lengkap dengan berbagai fitur seperti pengelolaan data, tabel, dan form yang dapat diintegrasikan dengan mudah.

Dengan menggunakan Filament 3, developer tidak perlu memulai semuanya dari nol. Fitur-fitur seperti tabel yang sudah dioptimalkan, integrasi form, hingga manajemen data bisa dibangun dengan cepat.

Ini sangat membantu perusahaan yang membutuhkan dashboard admin yang user-friendly untuk mempermudah pekerjaan tim internal mereka. Filament 3 juga memiliki fleksibilitas untuk disesuaikan dengan kebutuhan spesifik proyek, sehingga mempermudah developer dalam menambahkan fitur tambahan sesuai kebutuhan klien.

Spatie Laravel Permission: Package Populer untuk User Roles

Spatie Laravel Permission merupakan salah satu package terpopuler di ekosistem Laravel untuk membangun fitur manajemen peran dan izin (user roles and permissions) pada sebuah website modern.

Di dunia web development, fitur ini menjadi sangat penting untuk memastikan bahwa setiap pengguna mendapatkan hak akses yang sesuai dengan perannya. Misalnya, dalam sebuah sistem e-commerce, ada peran seperti admin, pelanggan, atau manajer toko, di mana masing-masing memiliki tingkat akses yang berbeda.

Spatie menyediakan berbagai fitur untuk memudahkan developer dalam mengelola peran dan izin ini, tanpa harus membangun semuanya dari awal. Dengan integrasi yang mulus ke dalam Laravel, Spatie Laravel Permission memungkinkan developer untuk mengatur siapa saja yang bisa mengakses halaman tertentu, mengelola produk, atau melakukan transaksi.

Paket ini sangat fleksibel dan mudah digunakan, serta dapat diandalkan untuk membangun website yang aman dan terstruktur dengan baik.

Membangun Fitur Role Management pada Website Toko Buah Online

Pada artikel ini, kita akan belajar bagaimana membuat fitur role management untuk sebuah website toko buah online. Dalam proyek ini, kita akan menggunakan kombinasi Laravel 11, Filament 3, dan Spatie Laravel Permission untuk mengelola peran pengguna. Website ini akan memiliki beberapa role, seperti:

  • Admin: memiliki akses penuh untuk mengelola semua aspek di dalam website, termasuk menambah atau menghapus produk, melihat laporan penjualan, dan mengelola pengguna.
  • Merchant: peran ini diberikan kepada penjual buah yang dapat menambah, mengedit, dan menghapus produk mereka sendiri, serta memantau pesanan yang masuk dari pelanggan.
  • Customer: pengguna biasa yang hanya memiliki akses untuk menjelajah produk, melakukan pembelian, dan melihat status pesanan mereka.

Dengan sistem role management ini, kita dapat memastikan bahwa setiap pengguna hanya bisa mengakses fitur-fitur yang sesuai dengan hak dan tanggung jawab mereka. Hal ini penting untuk menjaga keamanan, efisiensi, dan pengalaman pengguna yang optimal pada website.

Membuat Proyek Toko Buah dengan Laravel

Berikut adalah panduan lengkap untuk membuat proyek toko buah menggunakan Laravel melalui terminal, mengatur koneksi database MySQL, serta membuat migration dan model untuk tabel products, categories, dan transactions.

Install Laravel Melalui Composer

Langkah pertama adalah menginstall Laravel. Buka terminal dan jalankan perintah berikut untuk membuat proyek Laravel baru:

composer create-project --prefer-dist laravel/laravel toko-buah

Setelah instalasi selesai, masuk ke direktori proyek:

cd toko-buah

Mengatur File .env untuk Koneksi Database MySQL

Setelah proyek Laravel berhasil dibuat, buka file .env yang ada di root folder proyek. Ubah konfigurasi database agar sesuai dengan setup MySQL di komputer lokal:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=root
DB_PASSWORD=

Gantilah nama_database dengan nama database yang kamu buat di MySQL. Pastikan MySQL sudah aktif dan database yang dimaksud sudah tersedia.

Membuat Migration dan Model untuk Produk (Product)

Langkah selanjutnya adalah membuat migration dan model untuk tabel produk. Jalankan perintah berikut di terminal:

php artisan make:model Product -m

Perintah di atas akan membuat model Product beserta file migration-nya. Buka file migration yang ada di database/migrations, lalu modifikasi fungsi up untuk menambahkan struktur tabel products:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->decimal('price', 8, 2);
        $table->integer('stock');
        $table->unsignedBigInteger('category_id');
        $table->timestamps();

        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
    });
}

Tabel products akan memiliki kolom name, price, stock, serta relasi category_id yang terhubung ke tabel categories.

Membuat Migration dan Model untuk Kategori (Category)

Buat model dan migration untuk tabel kategori menggunakan perintah berikut:

php artisan make:model Category -m

Setelah itu, buka file migration yang dihasilkan dan sesuaikan dengan struktur berikut:

public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
    });
}

Tabel categories ini akan digunakan untuk mengelompokkan produk berdasarkan kategori buah.

Membuat Migration dan Model untuk Transaksi (Transactions)

Selanjutnya, buat model dan migration untuk tabel transaksi dengan perintah ini:

php artisan make:model Transaction -m

Kemudian, modifikasi file migration untuk tabel transactions seperti berikut:

public function up()
{
    Schema::create('transactions', function (Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger('product_id');
        $table->integer('quantity');
        $table->decimal('total_price', 8, 2);
        $table->timestamps();

        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
    });
}

Tabel transactions akan menyimpan informasi tentang produk yang dibeli dan jumlah pembelian (quantity), serta total harga (total_price).

Menjalankan Migration

Setelah semua migration telah dibuat dan dimodifikasi, jalankan perintah berikut untuk membuat tabel di database:

php artisan migrate

Perintah ini akan membuat tabel products, categories, dan transactions di database yang sudah terhubung melalui file .env.

Cara Menginstall dan Menggunakan Package Spatie Permission di Laravel

Berikut adalah langkah-langkah untuk menginstall package Spatie Laravel Permission dalam proyek Laravel, lengkap dengan contoh koding.

Install Package Spatie Laravel Permission

Buka terminal, pastikan kamu berada di dalam direktori proyek Laravel, lalu jalankan perintah berikut untuk menginstall package Spatie Laravel Permission:

composer require spatie/laravel-permission

Setelah package berhasil diinstall, kamu perlu meng-publish file konfigurasi dan migration-nya dengan menjalankan perintah ini:

php artisan vendor:publish --provider="Spatie\\\\Permission\\\\PermissionServiceProvider"

Perintah ini akan menghasilkan file konfigurasi permission.php di direktori config dan file migration untuk tabel roles, permissions, dan tabel pivot untuk menghubungkan pengguna dengan role dan permission.

Jalankan Migration

Setelah mem-publish file konfigurasi, jalankan perintah berikut untuk membuat tabel yang diperlukan oleh Spatie di database:

php artisan migrate

Ini akan membuat tabel roles, permissions, dan tabel pivot seperti model_has_roles, model_has_permissions, dan role_has_permissions di database.

Setup Model User

Buka file User.php di direktori app/Models. Tambahkan trait HasRoles dari Spatie ke dalam model User agar pengguna dapat diberikan role dan permission. Berikut adalah contohnya:

namespace App\\\\Models;

use Illuminate\\\\Foundation\\\\Auth\\\\User as Authenticatable;
use Spatie\\\\Permission\\\\Traits\\\\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // kode lainnya
}

Dengan menambahkan trait HasRoles, kamu bisa mulai memberikan role dan permission kepada pengguna.

Cara Menginstall Package Filament dan Membuat Filament Resource untuk Category, Product, User, Role, dan Permission

Berikut ini adalah langkah-langkah lengkap untuk menginstall package Filament di proyek Laravel dan membuat resource admin untuk mengelola Category, Product, User, Role, dan Permission dengan Filament.

Install Package Filament

Untuk menginstall Filament, pastikan kamu sudah berada di dalam folder proyek Laravel di terminal. Jalankan perintah berikut untuk menginstall package Filament:

composer require filament/filament

Setelah package berhasil diinstall, jalankan perintah berikut untuk mem-publish aset dan konfigurasi Filament:

php artisan filament:install

Perintah ini akan mengatur konfigurasi awal Filament dan membuat dashboard admin yang bisa langsung diakses.

Jalankan Migration

Jika proses instalasi Filament sudah selesai, pastikan kamu menjalankan migration agar tabel-tabel yang dibutuhkan oleh Filament dapat terbentuk:

php artisan migrate

Membuat Filament Resource untuk Category

Untuk membuat resource Category di Filament, gunakan perintah berikut di terminal:

php artisan make:filament-resource Category

Ini akan menghasilkan resource CategoryResource yang terletak di folder app/Filament/Resources/CategoryResource.php. Di file ini, kamu dapat menyesuaikan form dan tabel untuk pengelolaan data kategori.

Contoh sederhana dari form dan tabel untuk Category bisa seperti ini:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name'),
            TextColumn::make('created_at')->dateTime(),
        ])
        ->filters([]);
}

Membuat Filament Resource untuk Product

Untuk membuat resource Product, jalankan perintah ini di terminal:

php artisan make:filament-resource Product

Setelah resource Product dibuat, kamu bisa menyesuaikan form dan tabel di file ProductResource.php. Misalnya:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
            TextInput::make('price')->numeric()->required(),
            Select::make('category_id')
                ->relationship('category', 'name')->required(),
            TextInput::make('stock')->numeric()->required(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name'),
            TextColumn::make('price')->money('USD'),
            TextColumn::make('stock'),
            TextColumn::make('category.name')->label('Category'),
            TextColumn::make('created_at')->dateTime(),
        ])
        ->filters([]);
}

Membuat Filament Resource untuk User

Untuk membuat resource User, jalankan perintah berikut:

php artisan make:filament-resource User

Sesuaikan form dan tabel di UserResource.php. Contoh implementasi form dan tabel untuk User:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
            TextInput::make('email')->email()->required(),
            PasswordInput::make('password')->required(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name'),
            TextColumn::make('email'),
            TextColumn::make('created_at')->dateTime(),
        ])
        ->filters([]);
}

Membuat Filament Resource untuk Role

Jika kamu menggunakan package Spatie untuk role management, berikut cara membuat resource Role:

php artisan make:filament-resource Role

Di dalam RoleResource.php, sesuaikan form dan tabel untuk mengelola role. Misalnya:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
            MultiSelect::make('permissions')
                ->relationship('permissions', 'name'),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name'),
            TextColumn::make('permissions.name')->label('Permissions')->limit(3),
        ])
        ->filters([]);
}

Membuat Filament Resource untuk Permission

Untuk resource Permission, jalankan perintah:

php artisan make:filament-resource Permission

Di dalam file PermissionResource.php, kamu bisa menyesuaikan form dan tabelnya sebagai berikut:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name'),
            TextColumn::make('created_at')->dateTime(),
        ])
        ->filters([]);
}

Dengan mengikuti langkah-langkah di atas, kamu telah berhasil menginstall package Filament dan membuat resource untuk Category, Product, User, Role, dan Permission. Filament memudahkan pembuatan panel admin yang interaktif, lengkap dengan pengelolaan role dan permission menggunakan Spatie, sehingga pengembangan menjadi lebih cepat dan terstruktur.

Membatasi Akses Dashboard Filament Hanya untuk User dengan Role Admin

Setelah menambahkan Filament resource untuk Role dan memastikan role Admin sudah ada di database, kita akan memodifikasi model User agar hanya pengguna dengan role Admin yang dapat mengakses dashboard Filament. Untuk ini, kita akan menggunakan method canAccessPanel.

Pastikan Trait HasRoles Sudah Ditambahkan di Model User

Buka file app/Models/User.php dan tambahkan trait HasRoles dari Spatie Laravel Permission untuk mendukung fitur role management. Ini memungkinkan kita menggunakan method seperti hasRole untuk memeriksa apakah pengguna memiliki role tertentu.

namespace App\\\\Models;

use Illuminate\\\\Foundation\\\\Auth\\\\User as Authenticatable;
use Spatie\\\\Permission\\\\Traits\\\\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // Kode lainnya
}

Tambahkan Method canAccessPanel di Model User

Filament akan memeriksa method canAccessPanel untuk menentukan apakah seorang pengguna memiliki akses ke dashboard. Tambahkan method ini di dalam model User untuk memverifikasi apakah pengguna memiliki role Admin.

Buka file app/Models/User.php dan tambahkan method canAccessPanel berikut:

public function canAccessPanel(): bool
{
    return $this->hasRole('Admin');
}

Method canAccessPanel akan mengembalikan true hanya jika pengguna memiliki role Admin. Dengan begitu, hanya pengguna dengan role Admin yang akan diizinkan untuk mengakses dashboard Filament.

Cara Menguji Konfigurasi

Pastikan role Admin sudah ada di database. Jika belum, tambahkan role ini menggunakan Filament dashboard atau melalui Tinker:

php artisan tinker
use App\\\\Models\\\\User;
use Spatie\\\\Permission\\\\Models\\\\Role;

Role::firstOrCreate(['name' => 'Admin']);

$user = User::find(1); // Sesuaikan dengan ID user yang ingin diberi akses
$user->assignRole('Admin');

Login ke dashboard Filament menggunakan akun pengguna yang memiliki role Admin. Jika konfigurasi canAccessPanel sudah benar, hanya user dengan role Admin yang dapat mengakses dashboard, sementara pengguna lain akan ditolak aksesnya.

Dengan konfigurasi ini, akses ke dashboard Filament sekarang terbatas hanya untuk pengguna yang memiliki role Admin.

Menambahkan Role Merchant dan Customer serta Beberapa Permission pada Proyek dengan Filament Resource

Setelah sebelumnya menambahkan role Admin, kita akan menambahkan role Merchant dan Customer, serta beberapa permission yang relevan dengan proyek ini menggunakan Filament Resource. Dengan konfigurasi ini, kita dapat mengelola role dan permission dari dashboard Filament.

Tambahkan Role Merchant dan Customer melalui Filament

Pastikan RoleResource sudah dibuat dengan Filament. Untuk menambahkan role Merchant dan Customer, buka dashboard Filament di URL yang telah dikonfigurasi (biasanya /admin).

Pada dashboard Filament:

  • Masuk ke menu Roles yang disediakan oleh RoleResource.
  • Klik tombol Create atau Add Role.
  • Tambahkan role Merchant dengan mengisi nama role dan menyimpannya.
  • Ulangi langkah yang sama untuk menambahkan role Customer.

Tambahkan Permission Baru melalui Filament

Jika sudah ada PermissionResource, kita bisa menambahkan permission yang dibutuhkan untuk setiap role.

Pada dashboard Filament:

  • Akses menu Permissions dari PermissionResource.
  • Klik Create atau Add Permission untuk membuat permission baru.
  • Tambahkan permission yang sesuai, seperti view products, manage own products, purchase products, dan view orders.
  • Setelah menambahkan permission, klik Save.

Mengatur Permission untuk Role Merchant dan Customer

Setelah menambahkan role dan permission, kita bisa menetapkan permission yang sesuai untuk setiap role. Sebagai contoh:

  • Merchant memiliki izin seperti view products dan manage own products.
  • Customer memiliki izin view products dan purchase products.

Pada dashboard Filament:

  • Masuk ke menu Roles.
  • Pilih role Merchant dan atur permissions-nya, seperti view products dan manage own products.
  • Simpan perubahan.
  • Pilih role Customer dan tetapkan permissions view products dan purchase products.
  • Simpan perubahan.

Menambahkan Role Merchant dan Customer serta Permissions Menggunakan Seeder (Opsional)

Jika kamu ingin menambahkan role dan permission ini secara programatis, kamu bisa menggunakan seeder. Buat seeder RolePermissionSeeder jika belum ada:

php artisan make:seeder RolePermissionSeeder

Buka file database/seeders/RolePermissionSeeder.php dan tambahkan kode berikut untuk membuat role Merchant dan Customer serta permissions:

namespace Database\\\\Seeders;

use Illuminate\\\\Database\\\\Seeder;
use Spatie\\\\Permission\\\\Models\\\\Role;
use Spatie\\\\Permission\\\\Models\\\\Permission;

class RolePermissionSeeder extends Seeder
{
    public function run()
    {
        // Buat permissions
        $permissions = [
            'view products',
            'manage own products',
            'purchase products',
            'view orders',
        ];

        foreach ($permissions as $permission) {
            Permission::firstOrCreate(['name' => $permission]);
        }

        // Buat roles dan tetapkan permissions
        $adminRole = Role::firstOrCreate(['name' => 'Admin']);
        $merchantRole = Role::firstOrCreate(['name' => 'Merchant']);
        $customerRole = Role::firstOrCreate(['name' => 'Customer']);

        // Admin memiliki semua permissions
        $adminRole->syncPermissions(Permission::all());

        // Merchant memiliki permission tertentu
        $merchantRole->syncPermissions([
            'view products',
            'manage own products',
            'view orders',
        ]);

        // Customer memiliki permission tertentu
        $customerRole->syncPermissions([
            'view products',
            'purchase products',
        ]);
    }
}

Setelah menambahkan kode ini, jalankan seeder untuk membuat role dan permission secara otomatis di database:

php artisan db:seed --class=RolePermissionSeeder

Cara Membuat 10 Route Utama pada Proyek Toko Buah dan Melindungi dengan Role dan Permission

Dalam proyek toko buah, kita akan membuat 10 route utama yang akan dilindungi menggunakan role dan permission yang telah ditambahkan sebelumnya. Role seperti Admin, Merchant, dan Customer akan memiliki akses terbatas sesuai dengan permission yang telah diatur. Di Laravel, middleware digunakan untuk memastikan hanya pengguna dengan role dan permission tertentu yang bisa mengakses route yang sudah ditentukan.

Route untuk Menampilkan Produk (Dapat Diakses oleh Semua Role)

Route ini digunakan untuk menampilkan daftar produk yang tersedia di toko. Role Admin, Merchant, dan Customer semuanya bisa mengakses halaman ini karena permission view products diberikan kepada semua role.

Route::get('/products', function () {
    // Logic untuk menampilkan semua produk
})->middleware('permission:view products');

Route untuk Menambah Produk (Hanya untuk Merchant dan Admin)

Pada halaman ini, pengguna dengan role Admin dan Merchant dapat menambahkan produk baru ke toko. Hanya pengguna dengan role ini dan permission manage own products yang dapat mengakses halaman ini.

Route::get('/products/create', function () {
    // Logic untuk menampilkan form tambah produk
})->middleware(['role:Admin|Merchant', 'permission:manage own products']);

Route untuk Menyimpan Produk Baru (Hanya untuk Merchant dan Admin)

Route ini digunakan untuk menyimpan produk baru yang telah ditambahkan oleh Admin atau Merchant. Setelah mengisi form pada halaman sebelumnya, data produk akan disimpan melalui route ini.

Route::post('/products', function () {
    // Logic untuk menyimpan produk baru
})->middleware(['role:Admin|Merchant', 'permission:manage own products']);

Route untuk Mengedit Produk (Hanya untuk Merchant dan Admin)

Route ini mengizinkan pengguna dengan role Merchant dan Admin untuk mengedit produk yang ada. Hanya produk yang ditambahkan oleh mereka yang dapat diedit (untuk Merchant), atau semua produk (untuk Admin).

Route::get('/products/{id}/edit', function ($id) {
    // Logic untuk menampilkan form edit produk
})->middleware(['role:Admin|Merchant', 'permission:manage own products']);

Route untuk Memperbarui Produk (Hanya untuk Merchant dan Admin)

Setelah melakukan perubahan pada produk, route ini digunakan untuk memperbarui data produk di database. Hanya Merchant dan Admin yang memiliki akses untuk memperbarui produk.

Route::put('/products/{id}', function ($id) {
    // Logic untuk memperbarui data produk
})->middleware(['role:Admin|Merchant', 'permission:manage own products']);

Route untuk Menghapus Produk (Hanya untuk Admin)

Hanya pengguna dengan role Admin yang diizinkan untuk menghapus produk dari toko. Permission delete products dibutuhkan untuk melakukan tindakan ini.

Route::delete('/products/{id}', function ($id) {
    // Logic untuk menghapus produk
})->middleware(['role:Admin', 'permission:delete products']);

Route untuk Menampilkan Daftar Pesanan (Hanya untuk Admin dan Merchant)

Route ini digunakan untuk menampilkan daftar semua pesanan yang ada di sistem. Baik Admin maupun Merchant dapat melihat daftar pesanan, namun role Customer tidak memiliki akses.

Route::get('/orders', function () {
    // Logic untuk menampilkan semua pesanan
})->middleware(['role:Admin|Merchant', 'permission:view orders']);

Route untuk Membuat Pesanan Baru (Hanya untuk Customer)

Route ini digunakan oleh Customer untuk membuat pesanan baru. Setelah memilih produk, Customer akan diarahkan ke route ini untuk menyelesaikan pesanan mereka.

Route::post('/orders', function () {
    // Logic untuk membuat pesanan baru
})->middleware(['role:Customer', 'permission:purchase products']);

Route untuk Menampilkan Detail Pesanan (Hanya untuk Customer dan Merchant)

Customer dan Merchant dapat melihat detail dari pesanan tertentu. Merchant hanya bisa melihat pesanan yang terkait dengan produk yang mereka kelola, sementara Customer bisa melihat pesanan mereka sendiri.

Route::get('/orders/{id}', function ($id) {
    // Logic untuk menampilkan detail pesanan
})->middleware(['role:Customer|Merchant', 'permission:view orders']);

Route untuk Mengelola Pengguna (Hanya untuk Admin)

Hanya Admin yang memiliki akses untuk mengelola data pengguna lain di dalam sistem. Mereka dapat melihat daftar pengguna dan mengelola hak akses mereka.

Route::get('/users', function () {
    // Logic untuk menampilkan daftar pengguna
})->middleware(['role:Admin', 'permission:manage users']);

Dengaan menggunakan middleware role dan permission, kita dapat mengamankan setiap route dalam aplikasi toko buah sesuai dengan hak akses yang diberikan kepada setiap pengguna. Pendekatan ini memungkinkan pembatasan akses yang terstruktur, memaastikan bahwa pengguna hanya bisa melakukan tindakan yang sesuai dengan role dan permission mereka.

Penutup

Laravel terus berkembang dan semakin populer berkat pembaruan-pembaruan menarik yang memudahkan developer dalam membangun aplikasi web yang kuat dan scalable. Fitur-fitur baru yang hadir secara berkala membuat Laravel tetap relevan dan menjadi pilihan utama bagi banyak developer di seluruh dunia.

Untuk tetap mendapatkan ilmu terkini dan memaksimalkan kemampuan dalam menggunakan Laravel, pantau terus website BuildWithAngga. Di sana, kamu bisa menemukan banyak kelas gratis yang mencakup studi kasus menarik dan diajarkan oleh mentor berpengalaman. Selain itu, BuildWithAngga menawarkan akses seumur hidup, memungkinkan kamu untuk belajar kapan saja dan memastikan kamu selalu siap menghadapi tantangan baru di dunia web development.