feat(authentication): penyesuaian tampilan dan logika otentikasi pengguna

- Menambahkan `use Exception` pada kelas `Uim` untuk penanganan error yang lebih eksplisit.
- Menghapus penggunaan class `Request` yang tidak digunakan dalam `LoginRequest`.
- Memperbaiki logika penyesuaian role berdasarkan `KD_GROUP`, menetapkan `default` sebagai `customer_service` untuk menghindari kondisi default role tidak ditangani.
- Membuat beberapa perbaikan format dan konsistensi kelas serta elemen HTML di file blade:
  - Menyesuaikan atribut HTML untuk memastikan konsistensi seperti spasi, indentasi, dan tata letak elemen.
  - Memutakhirkan logo dan elemen visual untuk mendukung dinamika seperti nama aplikasi (`APP_NAME`) dan metode otentikasi (`METHOD_AUTH`) yang dapat dikonfigurasi melalui environment file.
  - Mengubah elemen teks dan gaya agar lebih responsif dan ramah pengguna.
- Meningkatkan pengalaman pengguna dengan memperbaiki hierarki elemen di form login dan halaman utama.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
Daeng Deni Mardaeni
2025-07-08 14:54:36 +07:00
parent cf5a7824c5
commit 0b377847cf
3 changed files with 41 additions and 34 deletions

View File

@@ -1,7 +1,8 @@
<?php <?php
namespace Modules\Authentication\Classes; namespace Modules\Authentication\Classes;
use Exception;
class Uim class Uim
{ {
private string $serviceHost; private string $serviceHost;

View File

@@ -4,7 +4,6 @@
use Illuminate\Auth\Events\Lockout; use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str; use Illuminate\Support\Str;
@@ -108,8 +107,7 @@
// Assign role based on user group code // Assign role based on user group code
$role = match($userArray[0]['KD_GROUP']) { $role = match($userArray[0]['KD_GROUP']) {
'001' => 'administrator', '001' => 'administrator',
'025' => 'customer_service', default => 'customer_service'
default => 'user'
}; };
$user->syncRoles($role); $user->syncRoles($role);

View File

@@ -3,8 +3,9 @@
@push('styles') @push('styles')
<style> <style>
.branded-bg { .branded-bg {
background-image:url('assets/media/images/2600x1600/1.png'); background-image: url('assets/media/images/2600x1600/1.png');
} }
.dark .branded-bg { .dark .branded-bg {
background-image: url('assets/media/images/2600x1600/1-dark.png'); background-image: url('assets/media/images/2600x1600/1-dark.png');
} }
@@ -13,71 +14,78 @@
@section('content') @section('content')
<div class="grid lg:grid-cols-2 grow"> <div class="grid lg:grid-cols-2 grow">
<div class="flex justify-center items-center p-8 lg:p-10 order-2 lg:order-1"> <div class="flex order-2 justify-center items-center p-8 lg:p-10 lg:order-1">
<div class="card max-w-[370px] w-full"> <div class="card max-w-[370px] w-full">
<form action="{{ route('login') }}" class="card-body flex flex-col gap-5 p-10" id="sign_in_form" method="POST"> <form action="{{ route('login') }}" class="flex flex-col gap-5 p-10 card-body" id="sign_in_form" method="POST">
@csrf @csrf
<div class="text-center mb-2.5"> <div class="mb-2.5 text-center">
<h3 class="text-lg font-semibold text-gray-900 leading-none mb-2.5"> <h3 class="mb-2.5 text-lg font-semibold leading-none text-gray-900">
Sign in Sign in
</h3> </h3>
</div> </div>
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<label class="form-label text-gray-900"> <label class="text-gray-900 form-label">
Email or NIK Email or NIK
</label> </label>
<input class="w-full input @error('login') border-danger @enderror" placeholder="Enter your email or NIK" type="text" name="login" value="{{ old('login') }}"> <input class="w-full input @error('login') border-danger @enderror"
placeholder="Enter your email or NIK" type="text" name="login" value="{{ old('login') }}">
@error('login') @error('login')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="text-sm alert text-danger">{{ $message }}</em>
@enderror @enderror
</div> </div>
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<div class="flex items-center justify-between gap-1"> <div class="flex gap-1 justify-between items-center">
<label class="form-label text-gray-900"> <label class="text-gray-900 form-label">
Password Password
</label> </label>
</div> </div>
<label class="input" data-toggle-password="true"> <label class="input" data-toggle-password="true">
<input class="@error('password') border-danger @enderror" name="password" placeholder="Enter Password" type="password" value=""/> <input class="@error('password') border-danger @enderror" name="password"
placeholder="Enter Password" type="password" value="" />
<div class="btn btn-icon" data-toggle-password-trigger="true"> <div class="btn btn-icon" data-toggle-password-trigger="true">
<i class="ki-outline ki-eye toggle-password-active:hidden"></i> <i class="ki-outline ki-eye toggle-password-active:hidden"></i>
<i class="ki-outline ki-eye-slash hidden toggle-password-active:block"></i> <i class="hidden ki-outline ki-eye-slash toggle-password-active:block"></i>
</div> </div>
@error('password') @error('password')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="text-sm alert text-danger">{{ $message }}</em>
@enderror @enderror
</label> </label>
</div> </div>
<label class="checkbox-group"> <label class="checkbox-group">
<input class="checkbox checkbox-sm" name="check" type="checkbox" value="1"/> <input class="checkbox checkbox-sm" name="check" type="checkbox" value="1" />
<span class="checkbox-label"> <span class="checkbox-label">
Remember me Remember me
</span> </span>
</label> </label>
<button type="submit" class="btn btn-primary flex justify-center grow"> <button type="submit" class="flex justify-center btn btn-primary grow">
Sign In Sign In
</button> </button>
</form> </form>
</div> </div>
</div> </div>
<div class="lg:rounded-xl lg:border lg:border-gray-200 lg:m-5 order-1 lg:order-2 bg-top xxl:bg-center xl:bg-cover bg-no-repeat branded-bg"> <div
<div class="flex flex-col p-8 lg:p-16 gap-4"> class="order-1 bg-top bg-no-repeat lg:rounded-xl lg:border lg:border-gray-200 lg:m-5 lg:order-2 xxl:bg-center xl:bg-cover branded-bg">
<a href="{{ route('dashboard') }}"> <div class="flex flex-col gap-4 p-8 w-full lg:p-16">
<img class="h-[100px] max-w-none" src="assets/media/app/logo-agi.png"/> <div class="flex w-full">
</a> <img class="h-[100px] lg:h-[200px] max-w-none" src="assets/media/app/logo-agi.png" />
</div>
<div class="flex flex-col gap-3"> <div class="flex flex-col gap-3">
<h3 class="text-2xl font-semibold text-gray-900"> <h3 class="text-4xl font-semibold text-gray-900">
Secure Access Portal {{ env('APP_NAME', 'Dashboard') }}
</h3> </h3>
<div class="text-base font-medium text-gray-600"> <div class="text-lg font-medium text-gray-600">
A robust authentication gateway ensuring A robust authentication
<br/> @if (env('METHOD_AUTH') == 'uim')
secure integrate with <span class="font-semibold text-gray-900">User ID
<span class="text-gray-900 font-semibold"> Management</span>
efficient user access @endif
gateway ensuring
<br />
secure efficient user access to the
<span class="font-semibold text-gray-900">
{{ env('APP_NAME', 'Dashboard') }}
</span> </span>
to the LPJ Online <br />
<br/>
Dashboard interface. Dashboard interface.
</div> </div>
</div> </div>