feat: make login with nip & change users table column, edit profile, and manage worker data

This commit is contained in:
Hafiz Caniago 2025-04-27 08:57:24 +07:00
parent ca18e1107e
commit d0af4d87bf
16 changed files with 83 additions and 48 deletions

View File

@ -13,7 +13,7 @@ class ManageUserController extends Controller
{
public function index()
{
$users = User::all();
$users = User::where('role', '!=', 'admin')->get();
return view('users-management.index', ['users' => $users]);
}
@ -26,14 +26,14 @@ class ManageUserController extends Controller
{
$user = new User();
$user->fill([
'nip' => $request->nip,
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$user->save();
return redirect()->route('users-management.index')->with('success', 'Akun Baru berhasil dibuat!');
return redirect()->route('users-management.index')->with('success', 'Akun Pegawai Baru berhasil dibuat!');
}
public function edit($id)
@ -54,7 +54,7 @@ class ManageUserController extends Controller
$user->save();
return redirect()->route('users-management.index')->with('success', 'Akun berhasil diperbarui!');
return redirect()->route('users-management.index')->with('success', 'Akun Pegawai berhasil diperbarui!');
}
public function disable($id)
@ -65,9 +65,9 @@ class ManageUserController extends Controller
$user->is_active = !$user->is_active;
$user->save();
if ($user->is_active) {
return redirect()->route('users-management.index')->with('success', 'Akun berhasil diaktifkan!');
return redirect()->route('users-management.index')->with('success', 'Akun Pegawai berhasil diaktifkan!');
}
return redirect()->route('users-management.index')->with('success', 'Akun berhasil dinonaktifkan!');
return redirect()->route('users-management.index')->with('success', 'Akun Pegawai berhasil dinonaktifkan!');
}
return redirect()->route('users-management.index')->with('error', 'Terjadi kesalahan!');
@ -79,7 +79,7 @@ class ManageUserController extends Controller
if ($user) {
$user->delete();
return redirect()->route('users-management.index')->with('success', 'Akun berhasil dihapus!');
return redirect()->route('users-management.index')->with('success', 'Akun Pegawai berhasil dihapus!');
}
return redirect()->route('users-management.index')->with('error', 'Terjadi kesalahan!');

View File

@ -64,6 +64,7 @@ class Kernel extends HttpKernel
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'is_super_admin' => \App\Http\Middleware\VerifyIsSuperAdmin::class,
'isAdmin' => \App\Http\Middleware\VerifyIsAdmin::class,
'isWorker' => \App\Http\Middleware\VerifyIsWorker::class,
];
}

View File

@ -7,7 +7,7 @@ use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;
class VerifyIsSuperAdmin
class VerifyIsAdmin
{
/**
* Handle an incoming request.
@ -16,7 +16,7 @@ class VerifyIsSuperAdmin
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::user()->is_superuser) {
if (Auth::user()->role === 'admin') {
return $next($request);
}

View File

@ -0,0 +1,25 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;
class VerifyIsWorker
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::user()->role === 'worker') {
return $next($request);
}
return redirect('/');
}
}

View File

@ -28,7 +28,7 @@ class LoginRequest extends FormRequest
public function rules(): array
{
return [
'email' => ['required', 'string', 'email'],
'nip' => ['required', 'string', 'min:12', 'max:12'],
'password' => ['required', 'string'],
];
}
@ -43,9 +43,9 @@ class LoginRequest extends FormRequest
$this->ensureIsNotRateLimited();
// Check user is_active status and not soft deleted
$user = User::where('email', $this->string('email'))->first();
$user = User::where('nip', $this->string('nip'))->first();
if (!$user || !$user->is_active || $user->trashed() || !Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
if (!$user || !$user->is_active || $user->trashed() || !Auth::attempt($this->only('nip', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([

View File

@ -25,7 +25,7 @@ class StoreNewAkun extends FormRequest
{
return [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)],
'nip' => ['required', 'string', 'min:12', 'max:12', Rule::unique(User::class)],
'password' => ['required', 'min:8', 'confirmed'],
];
}

View File

@ -20,10 +20,10 @@ class User extends Authenticatable
*/
protected $fillable = [
'name',
'email',
'nip',
'password',
'role',
'is_active',
'is_superuser',
];
/**

View File

@ -14,9 +14,9 @@ return new class extends Migration
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('nip')->unique();
$table->string('password');
$table->boolean('is_superuser')->default(false);
$table->enum('role', ['admin', 'worker', 'patient'])->default('patient');
$table->boolean('is_active')->default(true);
$table->rememberToken();
$table->timestamps();

View File

@ -15,13 +15,24 @@ class AdminSeeder extends Seeder
public function run(): void
{
$user = [
'name' => 'Admin SIM Surat',
'email' => 'admin@simsurat.com',
'password' => Hash::make('admin123'),
'is_superuser' => true,
'is_active' => true,
[
'name' => 'Admin RSABHK',
'nip' => '202510001234',
'password' => Hash::make('admin123'),
'role' => 'admin',
'is_active' => true,
'created_at' => now(),
],
[
'name' => 'Pegawai RSABHK',
'nip' => '202510001235',
'password' => Hash::make('worker123'),
'role' => 'worker',
'is_active' => true,
'created_at' => now(),
],
];
User::create($user);
User::insert($user);
}
}

View File

@ -40,7 +40,7 @@
],
(object) [
'icon' => 'fas fa-user',
'name' => 'Pengguna',
'name' => 'Pegawai',
'link' => '/manajemen-akun',
'childs' => [],
'is_superuser' => true, // Menambahkan field ini untuk mengontrol akses
@ -82,7 +82,7 @@
@continue
@endif
@if (isset($menu->is_superuser) && $menu->is_superuser && !Auth::user()->is_superuser)
@if (isset($menu->is_superuser) && $menu->is_superuser && !Auth::user()->role === 'admin')
@continue {{-- Menghentikan iterasi jika bukan superuser --}}
@endif

View File

@ -24,7 +24,7 @@
<!-- /.login-logo -->
<div class="card card-outline card-primary">
<div class="card-header text-center">
<h1><b>Laravel Boilerplate</h1>
<h1><b>RSABHK - REGISTRASI</h1>
</div>
<div class="card-body">
<p class="login-box-msg">Login untuk memulai</p>
@ -33,15 +33,15 @@
@csrf
<div class="form-group mb-3">
<div class="input-group">
<input type="email" name="email" class="form-control" placeholder="Email" required
value="{{ old('email') }}">
<input type="text" name="nip" class="form-control" placeholder="NIP" required
value="{{ old('nip') }}">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
<span class="fas fa-user"></span>
</div>
</div>
</div>
@error('email')
@error('nip')
<small style="color: red;">{{ $message }}</small>
@enderror
</div>

View File

@ -34,9 +34,9 @@
@method('PUT')
<div class="card-body">
<div class="form-group">
<label>Email address</label>
<input type="email" class="form-control" placeholder="Masukan email"
value="{{ $user->email }}" disabled>
<label>NIP</label>
<input type="email" class="form-control" placeholder="Masukan NIP"
value="{{ $user->nip }}" disabled>
</div>
<div class="form-group">
<label>Nama</label>

View File

@ -33,10 +33,10 @@
@csrf
<div class="card-body">
<div class="form-group">
<label>Email address</label>
<input name="email" type="email" class="form-control" placeholder="Masukan email"
value="{{ old('email') }}" required>
@error('email')
<label>NIP</label>
<input name="nip" type="text" class="form-control" placeholder="Masukan NIP"
value="{{ old('nip') }}" required>
@error('nip')
<small style="color: red;">{{ $message }}</small>
@enderror
</div>

View File

@ -34,9 +34,9 @@
@method('PUT')
<div class="card-body">
<div class="form-group">
<label>Email address</label>
<input type="email" class="form-control" placeholder="Masukan email"
value="{{ $user->email }}" disabled>
<label>NIP</label>
<input type="text" class="form-control" placeholder="Masukan NIP" value="{{ $user->nip }}"
disabled>
</div>
<div class="form-group">
<label>Nama</label>

View File

@ -12,7 +12,7 @@
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0">Manajemen Data Akun</h1>
<h1 class="m-0">Manajemen Data Pegawai</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
@ -30,7 +30,7 @@
<div class="card-header">
<a href="{{ route('users-management.create') }}" class="btn btn-info">
<i class="fas fa-plus"></i>
&nbsp;&nbsp;Tambah Akun
&nbsp;&nbsp;Tambah Akun Pegawai
</a>
</div>
<div class="card-body">
@ -38,8 +38,8 @@
<thead>
<tr>
<th>No</th>
<th>NIP</th>
<th>Nama Akun</th>
<th>Email Akun</th>
<th>Dibuat Pada</th>
<th>Status</th>
<th>Aksi</th>
@ -49,8 +49,8 @@
@foreach ($users as $index => $user)
<tr>
<td>{{ $index + 1 }}</td>
<td>{{ $user->nip }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>{{ $user->created_at }}</td>
<td>
@if ($user->is_active)

View File

@ -5,8 +5,6 @@ use App\Http\Controllers\DashboardController;
use App\Http\Controllers\ManageUserController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\DocumentTypeController;
use App\Http\Controllers\DocumentInController;
use App\Http\Controllers\DocumentOutController;
use Illuminate\Support\Facades\Route;
/*
@ -38,7 +36,7 @@ Route::middleware('auth')->group(function () {
# Dashboard Page
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
Route::middleware('is_super_admin')->group(function () {
Route::middleware('isAdmin')->group(function () {
# Manage User Page
Route::get('/manajemen-akun', [ManageUserController::class, 'index'])->name('users-management.index');
Route::get('/manajemen-akun/tambah', [ManageUserController::class, 'create'])->name('users-management.create');