Memahami Alur Konsep Role Spatie Laravel



Suatu hari saya mempelajari desain dari sebuah database aplikasi yang menggunakan laravel, dimana dalam prosesnya saya sedikit heran dengan desain database yang digunakan, hal yang membuat saya heran adalah cara aplikasi membaca role, karena dalam database untuk login user, nilai role sama sekali tidak didefinisikan. Karena saya sering sekali mendefinisikan nama role secara eksplisit pada login user tabel untuk aplikasi php native. Bagi saya yang baru mengenal Laravel, lalu harus ikut terlibat dalam proses modifikasi dan penambahan fitur, mempeljari desain databasenya cukup merepotkan.


Dalam perjalannya programmer lain memberi tahu bahwa proses role dalam aplikasi dibuat oleh library yang bernama Spatie, tetapi dia tidak memberi tahu bagaimana metode membaca atau dimana role – role tersebut disimpan.


Untuk Package Anda bisa membaca sendiri dokumentasi dan penjelasan dari library atau paket yang dapat digunakan pada framework laravel, karena saya disini hanya menjelaskan secara pengalaman yang mungkin bisa saja salah.


Konsep Penyimpanan Role dan Permissions Spatie Laravel

Saya mencoba mempelajari bagimana proses package tersebut menyimpan role didalam database, pada desain database aplikasi yang ada, terdapat beberapa tabel yang saya pikir merupakan bagian dari proses untuk menyimpan dan membaca.


Penjelasan saya mungkin bisa salah, karena saya hanya mempelajari dari data yang tersimpan bukan dari dokumentasi spatie. Setidaknya ada 5 tabel database yang bekerja dalam mengantur role dan permission

  1. roles
    Tabel ini menampun nama role dan jenis guard name, dalam implementasinya guard name ternyata digunakan untuk membedakan akes untuk route api dan web, sehingga dalam desain database yang saya baca, sebuah jenis role mungkin perlu ditambahkan dua jenis guard name yaitu web dan api

  2. roles_has_permission
    Tabel ini menampung dua jenis field (permiisons_id dan role_id) yang berelasi kedua tabel permissions dan roles, dimana permission_id berelasi ke tabel permissions dan role_id ke tabel roles.

  3. permissions
    Tabel permissions ini setidaknya berisi tiga field penting didalamnya yaitu id, name dan guard_name. Id merupakan refrensi untuk disimpan pada tabel role_has_permissions kemudian field name berisi nama permission dan terakhir guard_name berisi jenis guard_name yang boleh mengakses permission

  4. model_has_role
    Tabel ini berisi tiga field yaitu role_id, model_type, method_id. Field role_id berelasi dengan tabel role yang berisi nama role dan jenis guard name, kemudian ada model_type, bagian ini saya belum mengerti, lalu ada method_id, saya berpikir bahwa method id merupakan id user yang terdapat pada tabel user

  5. model_has_permissions
    Bagian ini saya tidak mengerti tapi sepertinya merupakan bagian dari ruang lingkup kerja spatie

Dari desain database diatas maka saya menyimpulkan bahwa ketika role akan dibaca pada user maka akan ada alur query dengan gambaran sederhana seperti berikut

  1. Tabel model_has_role (model_id) akan dicocokan dengan id pada tabel user

  2. kemudian untuk dapat membaca rolenya, id pada tabel role akan dicocokan dengan role_id pada tabel model_has_role sehingga bisa terbacalah nama dari tabel role

  3. Bisa disimpulkan proses pembacaan role adalah dengan cara mencocokan id user yang terdapat pada tabel model_has_roles dengan tabel user, terkahir dibacalah nama role


Menampilkan Role User yang Telah Ditambahkan oleh Spatie Laravel


Dalam proses modifikasi sistem web yang dibangun menggunakan laravel saya menemukan masalah dimana saya kesulitan untuk menampilkan nama role pada halaman datatables, sehingga selalu muncul pesan seperti berikut

membaca dan menampilkan role


Karena memang saya sama sekali belum mengetahui bagaimana sintaks – sintak query yang bisa dilakukan dalam laravel, maka saya coba mencari kode – kode yang berhubungan dengan role dimana teori alur kerja pada Konsep Penyimpanan Role dan Permissions Spatie Laravel merupakan kesimpulan dari potongan query yang terdapat pada model, sehingga query pada model yang saya miliki di Controller perlu dimodifikasi menjadi seperti berikut agar dapat membaca role



<?php 
$adminmaster_query = AdminMasterModel::select([
            'admin_master.id AS id',
            'admin_master.uuid AS uuid',
            'user.name AS user_name',
            'user.email AS email',
            'admin.name AS admin_name',
            'admin_master.payout_account_number AS payout_account_number',
            'payment_method.name AS payment_method_name',
            'payout_method.name AS payout_method_name',
            'admin_master.active AS active',
            'roles.name as role',
            //'model_has_roles.id as role_name',
            
        ])
            ->leftJoin('user', 'user.id', '=', 'admin_master.user_id')
            ->leftJoin('admin', 'admin.user_id', '=', 'user.id')
            ->leftJoin('payment_method', 'payment_method.id', '=', 'admin_master.payment_method_id')
            ->leftJoin('payout_method', 'payout_method.id', '=', 'admin_master.payout_method_id')
            ->leftJoin('model_has_roles', 'model_has_roles.model_id', 'user.id')
            ->leftJoin('roles', 'roles.id', 'model_has_roles.role_id')
            ->distinct();




Kurang lebih begitulah proses bagaimana saya Memahami Alur Konsep Role Spatie Laravel, ini tentunya bisa saja salah terlebih dikemukakan oleh orang yang baru 3 hari belajar laravel

0 Response to "Memahami Alur Konsep Role Spatie Laravel"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin