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