Authentication Atau Authorization kadang membuat sebagian orang mengalami kebingungan, kenapa ? karena mereka berdua itu terlihat sama, namun sebenarnya mereka berbeda.
Authentication berguna agar memproteksi user yang tidak memiliki akses ke dalam aplikasi. Sedangkan
Authorization berguna untuk membatasi akun user. Misalnya admin, manager, atau user. Atau yang biasa kita sebut ROLE / ATURAN.
Oke dari pada banyak cingcong langsung skuy dah !
langkah pertama install dulu laravel nya, O iya mimin menggunakan LARAVEL 8.
composer create-project --prefer-dist laravel/laravel rolelaravel
Setelah sudah sukses di install, maka selanjutnya setup database kamu.
Edit file dotENV nya
Edit file dotENV nya
DB_DATABASE=rolelaravel
DB_USERNAME=root
DB_PASSWORD=
Kemudian kita akan menambahkan Field ROLE kedalan table user menggunakan migration
Selain itu, kita juga bisa menggunakan gate diatas pada routing dengan memanfaatkan middleware. Buka routes/web.php dan ubah routing home menjadi.
php artisan make:migration add_role_column_to_users_table
Selanjutnya buka file migration yang baru saja di migrate, dan edit file tersebut dengan script ini<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddRoleColumnToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
//TAMBAHKAN KOLOM ROLE DENGAN TIPE ENUM DAN MEMILIKI BEBERAPA PILIHAN ROLE
$table->enum('role', ['user', 'manager', 'admin'])->default('user')->after('password');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('role');
});
}
}
Jika sudah maka lakukan migrate ke database menggunakan command
Penjelasan: Kita menggunakan directive @can dan diikuti dengan nama gates yang nantinya akan didefinisikan dimana jika gate tersebut bernilai true, maka menu yang diapitnya akan ditampilkan.
Adapun untuk men-handle menu navigasinya, buka file resources/views/layouts/app.blade.php dan tambahkan tag berikut didalam tag <ul> yang memiliki komentar Right side of navbar.
php artisan migrate
Jika sudah membuat rolenya dan sudah me-migratekannya kemudian kita membuat user dummy nya dengan commandphp artisan make:seeder UserTableSeeder
Kemudian edit file database/seeds/UserTableSeeder.php menjadi<?php
use Illuminate\Database\Seeder;
use App\Models\User;
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//KETIGA DATA INI AKAN DIJADIKAN DUMMY USER DENGAN MASING-MASING ROLE YANG DIMILIKINYA
User::create([
'name' => 'Arikun',
'email' => 'tolong@gmail.com',
'password' => bcrypt('secret'),
'role' => 'admin'
]);
User::create([
'name' => 'Melia',
'email' => 'tolongg@gmail.com',
'password' => bcrypt('secret'),
'role' => 'manager'
]);
User::create([
'name' => 'niisan',
'email' => 'niisan@gmail.com',
'password' => bcrypt('secret'),
'role' => 'user'
]);
}
}
Jangan lupa tambahkan namespacenya setelah tanda ?php Di paling atasnamespace Database\Seeders;
Register seeder di atas, buka file database/seeds/DatabaseSeeder.php dan tambahkan baris berikut ke dalam method run().
$this->call(UserTableSeeder::class);
Terapkan seeder yang ada dengan command php artisan db:seed
Selanjutnya kita akan meng-install authentication package yang dimana sejak Laravel 6 sudah dibuat terpisah dari Laravel itu sendiri. Dari command line, jalankan perintah berikut secara bergantian.
composer require laravel/ui php artisan ui bootstrap --auth npm install && npm run dev
Ada dua bagian yang akan terlihat mencolok pada materi kali ini, dimana menu navigasi akan kita tampilkan berdasarkan menu role masing-masing user yang sedang login dan bagian lainnya adalah content di halaman home akan menampilkan role user. Buka file resources/views/home.blade.php dan modifikasi menjadi
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<p>
Hi <strong>{{ auth()->user()->name }}</strong>,
Anda login sebagai
@can('isAdmin')
<span class="btn btn-success">Admin</span>
@elsecan('isManager')
<span class="btn btn-info">Manager</span>
@else
<span class="btn btn-warning">User</span>
@endcan
</p>
</div>
</div>
</div>
</div>
</div>
@endsection
Penjelasan: Kita menggunakan directive @can dan diikuti dengan nama gates yang nantinya akan didefinisikan dimana jika gate tersebut bernilai true, maka menu yang diapitnya akan ditampilkan.
Adapun untuk men-handle menu navigasinya, buka file resources/views/layouts/app.blade.php dan tambahkan tag berikut didalam tag <ul> yang memiliki komentar Right side of navbar.
<li class="nav-item">
<a href="{{ url('/home') }}" class="nav-link">Home</a>
</li>
@can('user')
<li class="nav-item">
<a href="" class="nav-link">Transaksi</a>
</li>
@endcan
@can('isManager')
<li class="nav-item">
<a href="" class="nav-link">Laporan</a>
</li>
@endcan
@can('isAdmin')
<li class="nav-item">
<a href="" class="nav-link">Pengaturan</a>
</li>
@endcan
Tugas terakhir adalah mendefinisikan gate authorization di Laravel untuk masing-masing role, buka file app/AppServiceProvider.php dan tambahkan code berikut di dalam method boot()
public function boot()
{
//MEMBUAT GATE DIMANA PARAMETER PERTAMA ADALAH NAMA GATE-NYA
//DAN PARAMETER SELANJUTNYA ADALAH CLOSURE FUNCTION
//DIMANA KITA MELAKUKAN PENGECEKAN, JIKA USER YANG SEDANG LOGIN ROLE BERNILAI TRUE, MAKA DIA AKAN DIIZINKAN
Gate::define('isAdmin', function($user) {
return $user->role == 'admin';
});
Gate::define('isManager', function($user) {
return $user->role == 'manager';
});
Gate::define('isUser', function($user) {
return $user->role == 'user';
});
}
Jangan lupa tambahkan dibagian paling atas setekah ?phpuse Illuminate\Support\Facades\Gate;
Selain itu, kita juga bisa menggunakan gate diatas pada routing dengan memanfaatkan middleware. Buka routes/web.php dan ubah routing home menjadi.
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->middleware('can:isAdmin')->name('home');
0 Komentar
Berkomentarlah dengan menggunakan bahasa yang baik dan benar agar tidak menyinggung pihak lain atau orang lain.