feat(authentication): perbaikan proses login dan penyesuaian role pengguna

- Memperbaiki proses login dengan menggunakan filter untuk email atau NIK sebagai parameter login.
- Menggunakan `updateOrCreate` untuk membuat atau memperbarui data user berdasarkan parameter login.
- Menambahkan logika untuk mendapatkan cabang berdasarkan 4 digit terakhir kode cabang (`KD_CABANG`) dan mengaitkannya dalam sesi serta data pengguna.
- Menerapkan penyesuaian role pengguna menggunakan kode grup pengguna (`KD_GROUP`) dengan logika `match`.
- Mengubah logika role menjadi lebih dinamis, memastikan pengguna mendapatkan role yang sesuai atau role default (`user`).
- Memastikan proses `session regenerate` terjadi setelah login.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
Daeng Deni Mardaeni
2025-06-22 16:59:57 +07:00
parent 58e3339431
commit cf5a7824c5

View File

@@ -84,39 +84,35 @@
[$key, $val] = explode('=', $rval); [$key, $val] = explode('=', $rval);
$userArray[0][$key] = $val; $userArray[0][$key] = $val;
} }
session()->put($userArray[0]);
// Use the login value to find the user // Use the login value to find the user
$loginField = filter_var($credentials['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'nik'; $loginField = filter_var($credentials['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'nik';
$user = User::where($loginField, $credentials['login'])->first();
$someValue = $userArray[0]['KD_CABANG']; // Example value containing the code $kodeCabang = $userArray[0]['KD_CABANG']; // Example value containing the code
$lastFourDigits = substr($someValue, -4); // Gets the last 4 characters $lastFourDigits = substr($kodeCabang, -4); // Gets the last 4 characters
$branch = Branch::where('code', 'LIKE', '%' . $lastFourDigits)->first(); $branch = Branch::where('code', 'LIKE', '%' . $lastFourDigits)->first();
session()->put($userArray[0]);
session()->put('branch_id',$branch->id); session()->put('branch_id',$branch->id);
if (!$user) { $user = User::updateOrCreate(
//get branch id by 4 digit terakhir 0029 [$loginField => $credentials['login']],
[
$user = User::create([
'name' => $userArray[0]['NAMA_USER'], 'name' => $userArray[0]['NAMA_USER'],
'email' => $loginField === 'email' ? $credentials['login'] : null, 'email' => $loginField === 'email' ? $credentials['login'] : null,
'nik' => $loginField === 'nik' ? $credentials['login'] : null, 'nik' => $loginField === 'nik' ? $credentials['login'] : null,
'password' => bcrypt($credentials['password']), 'password' => bcrypt($credentials['password']),
'branch_id' => $branch ? $branch->id : null, 'branch_id' => $branch ? $branch->id : null,
]); ]
);
switch ($userArray[0]['KD_GROUP']) { // Assign role based on user group code
case '001': $role = match($userArray[0]['KD_GROUP']) {
$user->assignRole('administrator'); '001' => 'administrator',
break; '025' => 'customer_service',
case '025': default => 'user'
$user->assignRole('customer_service'); };
break;
} $user->syncRoles($role);
}
Auth::loginUsingId($user->id, true); Auth::loginUsingId($user->id, true);
$this->session()->regenerate(); $this->session()->regenerate();