Authentication merupakan proses untuk memastikan suatu pengenalan atau memastikan suatu pengakuan. Sedangkan authorization adalah proses selanjutnya setelah authentication berhasil. Sistem akan memberikan akses sesuai kebijakan yang sudah ditentukan sebelumnya. Didalam sebuah aplikasi, keamanan data sangatlah penting. Oleh karena itu tidak sembarang orang bisa mengakses data tersebut.
Sebelumnya kita sudah mempelajari cara membuat fitur login, untuk langkah – langkahnya bisa disimak cara membuat login dan register dilaravel-10. Kemarin kita sudah mempelajari CRUD di Laravel langkah – langkahnya bisa disimak di cara crud dilaravel.
Cara Authentifikasi dan Authorosasi:
Tutorial kali ini merupakan lanjutan dari turotial kemarin: cara crud dilaravel. Oleh karena itu kita akan menambahkan beberapa code didalam file kemarin.
1. Database
Tambahkan kolom status pada tabel user. Lokasi file: database/migrations/users_table
Perhatikan isi function up
Code:
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('status');
$table->rememberToken();
$table->timestamps();
});
}
2. UserSeeder.php
Lokasi file: database/seeder/UserSeeder.php
Code:
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DB::table('users')->insert([
'name' => 'admin',
'status' => 'admin',
'email' => 'admin@gmail.com',
'password' => bcrypt('1234'),
'remember_token' => Str::random(60),
]);
DB::table('users')->insert([
'name' => 'user',
'status' => 'user',
'email' => 'user@gmail.com',
'password' => bcrypt('1234'),
'remember_token' => Str::random(60),
]);
}
}
3. user.blade.php
Membuat halaman untuk user karena halaman yang di akses user dan admin akan berbeda. Lokasi file: resources/view/user.blade.php
Code:
@extends('layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Hallo User aitc</h2>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th>No</th>
<th>Nim</th>
<th>Nama</th>
<th>Alamat</th>
</tr>
@foreach ($dtmhs as $item)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $item->nrp }}</td>
<td>{{ $item->nama }}</td>
<td>{{ $item->alamat }}</td>
</tr>
@endforeach
</table>
<form action="{{ route("logout") }}">
@csrf
<button type="submit" class="btn btn-danger">
<span class="ms-2">Log out</span>
</button>
</form>
@endsection
4. Controller
Lokasi file: app/Http/Controller
a) RegisterController.php
Karena di authorisasi membutuhkan status untuk login maka di bagian register juga di tambahkan unruk menambahkan status dalam function save
public function save(Request $request){
$data = new User();
$data->name = $request->name;
$data->email = $request->email;
$data->password = Hash::make($request->password);
$data->status = $request->status;
$data->save();
b) LoginController.php
Dalam file ini merupakan perintah tujuan halaman bagi status user jika login sebagai admin akan ditujukan ke halaman admin dan jika login sebagai user akan ditujukan ke halaman user
Code:
public function authenticate(Request $request)
{
if (Auth::attempt($request->only('email', 'password'))) {
if (auth()->user()->status == 'admin') {
return redirect('/datamhs');
} elseif (auth()->user()->status == 'user') {
return redirect('/user');
}
}
return redirect('/login');
}
c) MahasiswaController.php
Membuat function user
yang berfungsi untuk agar halaman user bisa tampil
Code:
public function user()
{
$dtmhs=Mahasiswa::all();
return view('user',compact('dtmhs'),['title'=>'data mahasiswa'])
->with('i', (request()->input('page', 1) - 1) * 5);
}
5. Routes
Membuat jalur baru dan menambahkan middlelware(“auth”)
yang berfungsi dimana ketika ingin mengakses halaman tersebut kita harus login. Lokasi file: routes/web.php
Code:
?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\MahasiswaController;
use App\Http\Controllers\RegisterController;
use App\Http\Controllers\LoginController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('login');
});
route::post('/postlogin',[LoginController::class,'postlogin'])->name('postlogin');
Route::post('/login',[LoginController::class,'authenticate']);
Route::get('/logout',[LoginController::class,'logout'])->name("logout");
Route::get('/login',[RegisterController::class,'tampil'])->name('login');
Route::get('/register',[RegisterController::class,'tambah']);
Route::post('/register/save',[RegisterController::class,'save']);
Route::prefix("/")->middleware("auth")->group(function(){
Route::get('/datamhs',[MahasiswaController::class,'index'])->name('datamahasiswa');
Route::get('/user',[MahasiswaController::class,'user'])->name('user');
Route::get('/inputdata',[MahasiswaController::class,'create'])->name('inputdata');
Route::post('/simpandata',[MahasiswaController::class,'store'])->name('simpandata');
Route::get('/edit/{id}',[MahasiswaController::class,'edit'])->name('edit');
Route::post('/updatedata/{id}',[MahasiswaController::class,'update'])->name('updatedata');
Route::get('/hapus/{id}',[MahasiswaController::class,'destroy'])->name('hapus');
});
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Tampilan:
Login admin

Halaman admin

Login user

Halaman user
