Skip to content

Commit

Permalink
feat(auth): adds guest login functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
rizkyilhampra committed Nov 21, 2024
1 parent 2530a65 commit f309f1c
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 63 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,7 @@ Jika Anda menghadapi masalah atau memiliki pertanyaan, Anda dapat:
## Roadmap

- [x] *Implement scheduled command for RajaOngkir API re-caching*
- [x] *Allow guests to access Admin Panel*

## Next

Expand Down
30 changes: 18 additions & 12 deletions app/Http/Controllers/Controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Gate as FacadesGate;
use Laravel\Fortify\Fortify;
Expand All @@ -15,34 +16,39 @@ class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

public function authenticated()
public function authenticated(): RedirectResponse
{
$user = User::find(auth()->user()->id);
$user = User::find(auth('web')->user()->id);
$user->update(['last_login_at' => now()]);

if (FacadesGate::allows('asAdmin')) {
return redirect()->intended(Fortify::redirects('home', route('admin.beranda')))->with('success-login-admin');
} else if (FacadesGate::allows('asUser')) {
return redirect()->intended(Fortify::redirects('home', route('index')))->with('success', 'Login berhasil, selamat datang ' . $user->name . '!');
if (! FacadesGate::allows('asAdmin')) {
return redirect()->intended(Fortify::redirects('home', route('index')))->with('success', 'Login berhasil, selamat datang '.$user->name.'!');
}
return redirect('/');

return redirect()->intended(Fortify::redirects('home', route('admin.beranda')))->with('success-login-admin');
}

public static function loginDuration()
public static function loginDuration(): ?string
{
$lastLogin = auth()->user()->last_login_at;
if (! auth('web')->check()) {
return null;
}

$lastLogin = auth('web')->user()->last_login_at;
$diffInMinutes = Carbon::parse($lastLogin)->diffInMinutes();

if ($diffInMinutes < 60) {
return floor($diffInMinutes) . ' menit';
return floor($diffInMinutes).' menit';
}

if ($diffInMinutes < 1440) {
$diffInHours = floor($diffInMinutes / 60);
return $diffInHours . ' jam';

return $diffInHours.' jam';
}

$diffInDays = floor($diffInMinutes / 1440);
return $diffInDays . ' hari';

return $diffInDays.' hari';
}
}
13 changes: 13 additions & 0 deletions app/Http/Controllers/GuestController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class GuestController extends Controller
{
public function __invoke(Request $request)
{
return redirect()->route('admin.beranda')->with('success-login-admin');
}
}
12 changes: 8 additions & 4 deletions resources/views/admin/beranda.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@
<div class="col-12 mb-4">
<div class="hero bg-primary text-white">
<div class="hero-inner">
<h2>Selamat datang kembali, {{ auth()->user()->name }}!</h2>
@auth
<h2>Selamat datang kembali, {{ auth()->user()->name }}!</h2>
@else
<h2>Selamat datang!</h2>
@endauth
<p class="lead">Disini adalah tempat untuk mengelola penyakit, gejala, rule, dan diagnosis</p>
</div>
</div>
Expand Down Expand Up @@ -86,7 +90,7 @@
<h4>Provinsi Pengguna</h4>
</div>
<div class="card-body">
<canvas id="myChart1" ></canvas>
<canvas id="myChart1"></canvas>
</div>
</div>
</div>
Expand All @@ -96,7 +100,7 @@
<h4>Kota Pengguna</h4>
</div>
<div class="card-body">
<canvas id="myChart2" ></canvas>
<canvas id="myChart2"></canvas>
</div>
</div>
</div>
Expand All @@ -106,7 +110,7 @@
<h4>Profesi Pengguna</h4>
</div>
<div class="card-body">
<canvas id="myChart3" ></canvas>
<canvas id="myChart3"></canvas>
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@
No
</th>
<th>Nama Pengguna</th>
<th>Email Pengguna</th>
@auth
<th>Email Pengguna</th>
@endauth
<th>Nama Penyakit</th>
<th>Tanggal Dibuat/Diubah</th>
<th>Aksi</th>
Expand All @@ -79,7 +81,9 @@
{{ $loop->iteration }}
</td>
<td>{{ $value['user']['name'] }}</td>
<td>{{ $value['user']['email'] }}</td>
@auth
<td>{{ $value['user']['email'] }}</td>
@endauth
@if ($value['penyakit']['id'] == null)
<td><span class="badge bg-danger text-white">Penyakit tidak ditemukan</span>
</td>
Expand Down
2 changes: 2 additions & 0 deletions resources/views/auth/login.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ class="form-control @error('password') is-invalid @enderror" name="password"
</div>
<div class="mt-3 text-muted text-center">
Belum punya akun? <a href="{{ route('register') }}">Daftar disini </a>
<br>
atau <a href="{{ route('login-as-guest') }}">Masuk sebagai Tamu</a>
</div>
</div>
</div>
Expand Down
25 changes: 17 additions & 8 deletions resources/views/layouts/admin/navbar.blade.php
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
<form class="form-inline mr-auto">

<ul class="navbar-nav mr-3">
<li><a href="#" data-toggle="sidebar" class="nav-link nav-link-lg"><i class="fas fa-bars"></i></a></li>
</ul>
</form>
<ul class="navbar-nav navbar-right">
<li class="dropdown"><a href="#" data-toggle="dropdown"
class="nav-link dropdown-toggle nav-link-lg nav-link-user">
<img alt="image" src="{{ auth()->user()->getAvatarAttribute() }}" class="rounded-circle mr-1">
<div class="d-sm-none d-lg-inline-block">Hi, {{ auth()->user()->name }}</div>
@auth
<img alt="image" src="{{ auth()->user()->getAvatarAttribute() }}" class="rounded-circle mr-1">
<div class="d-sm-none d-lg-inline-block">Hi, {{ auth()->user()->name }}</div>
@else
<div class="d-sm-none d-lg-inline-block">Tamu</div>
@endauth
</a>
<div class="dropdown-menu dropdown-menu-right">
<div class="dropdown-title">{{ $loginDuration }} yang lalu</div>
<a href="" id="buttonLogout" class="dropdown-item has-icon text-danger">
<i class="fas fa-sign-out-alt"></i> Logout
</a>
<div class="dropdown-menu dropdown-menu-right" style="width: max-content;">
@auth
<div class="dropdown-title">{{ $loginDuration }} yang lalu</div>
<a href="" id="buttonLogout" class="dropdown-item has-icon text-danger">
<i class="fas fa-sign-out-alt"></i> Logout
</a>
@else
<a href="{{ route('index') }}" class="dropdown-item has-icon text-danger">
<i class="fas fa-sign-out-alt"></i> Kembali ke Halaman Utama
</a>
@endauth
<form action="{{ route('logout') }}" method="post" id="formLogout" hidden style="display: none">
@csrf
</form>
Expand Down
10 changes: 7 additions & 3 deletions resources/views/pdf/histori-diagnosis.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
No
</th>
<th>Nama Pengguna</th>
<th>Email Pengguna</th>
@auth
<th>Email Pengguna</th>
@endauth
<th>Nama Penyakit</th>
<th>Tanggal Dibuat/Diubah</th>
</tr>
Expand All @@ -19,8 +21,10 @@
<td>
{{ $loop->iteration }}
</td>
<td>{{ $key['user']['name'] }}</td>
<td>{{ $key['user']['email'] }}</td>
<td>{{$key['user']['name']}}</td>
@auth
<td>{{ $key['user']['email'] }}</td>
@endauth
<td>{{ $key['penyakit']['name'] }}</td>
<td>{{ $key['updated_at'] }}</td>
</tr>
Expand Down
68 changes: 34 additions & 34 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,63 @@

use App\Http\Controllers\Admin\BerandaController;
use App\Http\Controllers\DiagnosisController;
use App\Http\Controllers\GuestController;
use App\Http\Controllers\ShowPdfController;
use App\Http\Controllers\SocialAuthController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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('/', [UserController::class, 'index'])->name('index');

Route::middleware(['auth', 'verified'])->group(function () {
Route::get('home', [\App\Http\Controllers\Controller::class, 'authenticated'])->name('home');
Route::get('/login-as-guest', GuestController::class)->name('login-as-guest')->middleware('guest');

Route::prefix('admin')->middleware('can:asAdmin')->group(function () {
Route::get('beranda', [BerandaController::class, 'index'])->name('admin.beranda');
Route::prefix('penyakit')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\PenyakitController::class, 'index'])->name('admin.penyakit');
Route::get('tambah', [\App\Http\Controllers\Admin\PenyakitController::class, 'create'])->name('admin.penyakit.tambah');
Route::prefix('admin')->group(function () {
Route::get('beranda', [BerandaController::class, 'index'])->name('admin.beranda');
Route::prefix('penyakit')->group(function () {
Route::middleware(['auth', 'verified', 'can:asAdmin'])->group(function () {
Route::post('store', [\App\Http\Controllers\Admin\PenyakitController::class, 'store'])->name('admin.penyakit.store');
Route::get('edit/{id}', [\App\Http\Controllers\Admin\PenyakitController::class, 'edit'])->name('admin.penyakit.edit');
Route::put('update/{id}', [\App\Http\Controllers\Admin\PenyakitController::class, 'update'])->name('admin.penyakit.update');
Route::delete('destroy/{id}', [\App\Http\Controllers\Admin\PenyakitController::class, 'destroy'])->name('admin.penyakit.destroy');
Route::get('pdf', [ShowPdfController::class, 'penyakitPdf'])->name('penyakit.pdf');
Route::get('tambah', [\App\Http\Controllers\Admin\PenyakitController::class, 'create'])->name('admin.penyakit.tambah');
});
Route::prefix('gejala')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\GejalaController::class, 'index'])->name('admin.gejala');
Route::get('tambah', [\App\Http\Controllers\Admin\GejalaController::class, 'create'])->name('admin.gejala.tambah');
Route::get('/', [\App\Http\Controllers\Admin\PenyakitController::class, 'index'])->name('admin.penyakit');
Route::get('edit/{id}', [\App\Http\Controllers\Admin\PenyakitController::class, 'edit'])->name('admin.penyakit.edit');
Route::get('pdf', [ShowPdfController::class, 'penyakitPdf'])->name('penyakit.pdf');
});
Route::prefix('gejala')->group(function () {
Route::middleware(['auth', 'verified', 'can:asAdmin'])->group(function () {
Route::post('store', [\App\Http\Controllers\Admin\GejalaController::class, 'store'])->name('admin.gejala.store');
Route::get('edit/{id}', [\App\Http\Controllers\Admin\GejalaController::class, 'edit'])->name('admin.gejala.edit');
Route::put('update/{id}', [\App\Http\Controllers\Admin\GejalaController::class, 'update'])->name('admin.gejala.update');
Route::delete('destroy/{id}', [\App\Http\Controllers\Admin\GejalaController::class, 'destroy'])->name('admin.gejala.destroy');
Route::get('pdf', [ShowPdfController::class, 'gejalaPdf'])->name('gejala.pdf');
});
Route::prefix('rule')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\RuleController::class, 'index'])->name('admin.rule');
Route::get('tambah', [\App\Http\Controllers\Admin\RuleController::class, 'create'])->name('admin.rule.tambah');
Route::get('/', [\App\Http\Controllers\Admin\GejalaController::class, 'index'])->name('admin.gejala');
Route::get('tambah', [\App\Http\Controllers\Admin\GejalaController::class, 'create'])->name('admin.gejala.tambah');
Route::get('edit/{id}', [\App\Http\Controllers\Admin\GejalaController::class, 'edit'])->name('admin.gejala.edit');
Route::get('pdf', [ShowPdfController::class, 'gejalaPdf'])->name('gejala.pdf');
});
Route::prefix('rule')->group(function () {
Route::middleware(['auth', 'verified', 'can:asAdmin'])->group(function () {
Route::post('store', [\App\Http\Controllers\Admin\RuleController::class, 'store'])->name('admin.rule.store');
Route::get('edit/{id}', [\App\Http\Controllers\Admin\RuleController::class, 'edit'])->name('admin.rule.edit');
Route::put('update/{id}', [\App\Http\Controllers\Admin\RuleController::class, 'update'])->name('admin.rule.update');
Route::delete('destroy/{id}', [\App\Http\Controllers\Admin\RuleController::class, 'destroy'])->name('admin.rule.destroy');
Route::get('pdf', [ShowPdfController::class, 'rulePdf'])->name('rule.pdf');
});
Route::prefix('histori-diagnosis')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\HistoriDiagnosisController::class, 'index'])->name('admin.histori.diagnosis');
Route::get('detail/{id}', [\App\Http\Controllers\Admin\HistoriDiagnosisController::class, 'detail'])->name('admin.histori.diagnosis.detail');
Route::get('/', [\App\Http\Controllers\Admin\RuleController::class, 'index'])->name('admin.rule');
Route::get('tambah', [\App\Http\Controllers\Admin\RuleController::class, 'create'])->name('admin.rule.tambah');
Route::get('edit/{id}', [\App\Http\Controllers\Admin\RuleController::class, 'edit'])->name('admin.rule.edit');
Route::get('pdf', [ShowPdfController::class, 'rulePdf'])->name('rule.pdf');
});
Route::prefix('histori-diagnosis')->group(function () {
Route::middleware(['auth', 'verified', 'can:asAdmin'])->group(function () {
Route::delete('destroy', [\App\Http\Controllers\Admin\HistoriDiagnosisController::class, 'destroy'])->name('admin.diagnosis.destroy');
Route::get('pdf', [ShowPdfController::class, 'historiDiagnosisPdf'])->name('histori.diagnosis.pdf');
});
Route::get('/', [\App\Http\Controllers\Admin\HistoriDiagnosisController::class, 'index'])->name('admin.histori.diagnosis');
Route::get('detail/{id}', [\App\Http\Controllers\Admin\HistoriDiagnosisController::class, 'detail'])->name('admin.histori.diagnosis.detail');
Route::get('pdf', [ShowPdfController::class, 'historiDiagnosisPdf'])->name('histori.diagnosis.pdf');
});
});

Route::middleware(['auth', 'verified'])->group(function () {
Route::get('home', [\App\Http\Controllers\Controller::class, 'authenticated'])->name('home');

Route::middleware('can:asUser')->group(function () {
Route::post('diagnosis', [DiagnosisController::class, 'diagnosis'])
Expand Down

0 comments on commit f309f1c

Please sign in to comment.