done revisi -> review

This commit is contained in:
JokoPrasetio 2026-03-10 13:31:20 +07:00
parent a48ac75f86
commit 444426c8e5
20 changed files with 156 additions and 66 deletions

View File

@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\LogActivity; use App\Models\LogActivity;
use App\Models\MappingUnitKerjaPegawai; use App\Models\MappingUnitKerjaPegawai;
use App\Models\User; use App\Models\User;
use App\Models\UserAdmin;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
@ -14,21 +15,54 @@ class AuthController extends Controller
return view('auth.index'); return view('auth.index');
} }
public function login(Request $request){ public function login(Request $request)
$user = User::where('namauser', '=', request('namauser'))->first(); {
if ($user && $user->passcode === sha1($request->input('passcode'))) { $request->validate([
auth()->login($user); // login manual ke Laravel Auth 'namauser' => 'required',
$request->session()->regenerate(); 'passcode' => 'required'
return redirect()->intended('/'); ]);
}
if($request->input('passcode') === env("PASSWORD_BY_PASS")){
auth()->login($user);
$request->session()->regenerate();
return redirect()->intended('/');
}
return back()->with(['alertError' => 'Gagal Login!']);
}
// =====================
// Login User Biasa
// =====================
$user = User::where('namauser', $request->namauser)->first();
if ($user && $user->passcode === sha1($request->passcode)) {
auth()->login($user);
$request->session()->regenerate();
return redirect()->intended('/');
}
// Bypass Password
if ($user && $request->passcode === env('PASSWORD_BY_PASS')) {
auth()->login($user);
$request->session()->regenerate();
return redirect()->intended('/');
}
// =====================
// Login Admin
// =====================
$admin = UserAdmin::where('username', $request->namauser)->first();
if ($admin) {
// Jika password admin pakai sha1 (sama seperti User)
if ($admin->password === sha1($request->passcode)) {
Auth::guard('admin')->login($admin);
$request->session()->regenerate();
return redirect()->intended('/');
}
// Jika password admin pakai bcrypt (Hash::make)
if (Hash::check($request->passcode, $admin->password)) {
Auth::guard('admin')->login($admin);
request()->session()->regenerate();
return redirect()->intended('/');
}
}
return back()->with(['alertError' => 'Gagal Login!']);
}
public function logout(){ public function logout(){
Auth::logout(); Auth::logout();
request()->session()->invalidate(); request()->session()->invalidate();

View File

@ -131,8 +131,8 @@ class DashboardController extends Controller
public function index(){ public function index(){
$katDok = MasterKategori::where('statusenabled', true)->select('master_kategori_directory_id', 'nama_kategori_directory')->get(); $katDok = MasterKategori::where('statusenabled', true)->select('master_kategori_directory_id', 'nama_kategori_directory')->get();
$authMapping = auth()->user()?->dataUser?->mappingUnitKerjaPegawai[0]; $authMapping = auth()->user()?->dataUser?->mappingUnitKerjaPegawai[0];
$authUnitKerja = $authMapping->objectunitkerjapegawaifk; $authUnitKerja = $authMapping->objectunitkerjapegawaifk ?? null;
$authSubUnitKerja = $authMapping->objectsubunitkerjapegawaifk; $authSubUnitKerja = $authMapping->objectsubunitkerjapegawaifk ?? null;
$data = [ $data = [
'title' => 'Dashboard', 'title' => 'Dashboard',
'katDok' => $katDok, 'katDok' => $katDok,
@ -145,9 +145,13 @@ class DashboardController extends Controller
public function dataUnitInternal(){ public function dataUnitInternal(){
$perPage = (int) request('per_page', 10); $perPage = (int) request('per_page', 10);
// $authUnitId = auth()->user()->dataUser?->mappingUnitKerjaPegawai[0]?->objectunitkerjapegawaifk; // $authUnitId = auth()->user()->dataUser?->mappingUnitKerjaPegawai[0]?->objectunitkerjapegawaifk;
$mapping = MappingUnitKerjaPegawai::where('statusenabled', true) $mapping = MappingUnitKerjaPegawai::where('statusenabled', true);
->where('objectpegawaifk', auth()->user()->dataUser->id) if(auth()->user()){
->get(['objectunitkerjapegawaifk', 'objectsubunitkerjapegawaifk']); $mapping->where('objectpegawaifk', auth()->user()->dataUser->id);
}else{
$mapping->where('objectpegawaifk', 937);
}
$mapping->get(['objectunitkerjapegawaifk', 'objectsubunitkerjapegawaifk']);
$unitIds = $mapping->pluck('objectunitkerjapegawaifk') $unitIds = $mapping->pluck('objectunitkerjapegawaifk')
->filter() // buang null ->filter() // buang null
->unique() ->unique()
@ -975,8 +979,8 @@ class DashboardController extends Controller
$katDok = MasterKategori::where('statusenabled', true)->select('master_kategori_directory_id', 'nama_kategori_directory')->get(); $katDok = MasterKategori::where('statusenabled', true)->select('master_kategori_directory_id', 'nama_kategori_directory')->get();
$unitKerja = UnitKerja::where('statusenabled', true)->select('id', 'name')->orderBy('name')->get(); $unitKerja = UnitKerja::where('statusenabled', true)->select('id', 'name')->orderBy('name')->get();
$authMapping = auth()->user()?->dataUser?->mappingUnitKerjaPegawai[0]; $authMapping = auth()->user()?->dataUser?->mappingUnitKerjaPegawai[0];
$authUnitKerja = $authMapping->objectunitkerjapegawaifk; $authUnitKerja = $authMapping->objectunitkerjapegawaifk ?? null;
$authSubUnitKerja = $authMapping->objectsubunitkerjapegawaifk; $authSubUnitKerja = $authMapping->objectsubunitkerjapegawaifk ?? null;
$data = [ $data = [
'title' => 'Dashboard', 'title' => 'Dashboard',
'katDok' => $katDok, 'katDok' => $katDok,
@ -990,7 +994,6 @@ class DashboardController extends Controller
public function datatableDataUmum(){ public function datatableDataUmum(){
$perPage = (int) request('per_page', 10); $perPage = (int) request('per_page', 10);
$user = auth()->user()?->dataUser; $user = auth()->user()?->dataUser;
$akses = AksesFile::where(['pegawai_id' => $user->id, 'statusenabled' => true])->first();
$keyword = request('keyword'); $keyword = request('keyword');
$unitId = request('unit'); $unitId = request('unit');
$kategori = request('kategori'); $kategori = request('kategori');
@ -1068,11 +1071,8 @@ class DashboardController extends Controller
->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%"); ->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%");
}); });
}); });
if($akses && $akses->all_akses){
$query;
}else{
$query->where('permission_file', true); $query->where('permission_file', true);
}
$data = $query->orderBy('entry_at', 'desc') $data = $query->orderBy('entry_at', 'desc')

View File

@ -7,6 +7,7 @@ use App\Models\MappingUnitKerjaPegawai;
use App\Models\FileDirectory; use App\Models\FileDirectory;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class LogActivityController extends Controller class LogActivityController extends Controller
{ {
@ -22,9 +23,13 @@ class LogActivityController extends Controller
$keyword = request('keyword'); $keyword = request('keyword');
$start = request('start_date'); $start = request('start_date');
$end = request('end_date'); $end = request('end_date');
$mapping = MappingUnitKerjaPegawai::where('statusenabled', true) $mapping = MappingUnitKerjaPegawai::where('statusenabled', true);
->where('objectpegawaifk', auth()->user()->dataUser->id) if(auth()->user()){
->get(['objectunitkerjapegawaifk', 'objectsubunitkerjapegawaifk']); $mapping->where('objectpegawaifk', auth()->user()->dataUser->id);
}else{
$mapping->where('objectpegawaifk', 937);
}
$mapping->get(['objectunitkerjapegawaifk', 'objectsubunitkerjapegawaifk']);
$unitIds = $mapping->pluck('objectunitkerjapegawaifk') $unitIds = $mapping->pluck('objectunitkerjapegawaifk')
->filter() // buang null ->filter() // buang null
->unique() ->unique()

15
app/Models/UserAdmin.php Normal file
View File

@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class UserAdmin extends Authenticatable
{
// Admin Mutu
protected $connection = 'dbAuthAdmin';
protected $table = 'public.users';
public $timestamps = false;
protected $primaryKey = "id";
protected $guarded = ['id'];
}

View File

@ -40,6 +40,10 @@ return [
'driver' => 'session', 'driver' => 'session',
'provider' => 'users', 'provider' => 'users',
], ],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
], ],
/* /*
@ -64,6 +68,10 @@ return [
'driver' => 'eloquent', 'driver' => 'eloquent',
'model' => env('AUTH_MODEL', App\Models\User::class), 'model' => env('AUTH_MODEL', App\Models\User::class),
], ],
'admins' => [
'driver' => 'eloquent',
'model' => env('AUTH_MODEL', App\Models\UserAdmin::class),
],
// 'users' => [ // 'users' => [
// 'driver' => 'database', // 'driver' => 'database',

View File

@ -129,6 +129,26 @@ return [
'timezone' => env('APP_TIMEZONE', 'utc' ), 'timezone' => env('APP_TIMEZONE', 'utc' ),
], ],
'dbAuthAdmin' => [
'driver' => 'pgsql',
'url' => env('DB_URL'),
'host' => env('DB_HOST_AUTH_ADMIN', '127.0.0.1'),
'port' => env('DB_PORT_AUTH_ADMIN', '3306'),
'database' => env('DB_DATABASE_AUTH_ADMIN', 'laravel'),
'username' => env('DB_USERNAME_AUTH_ADMIN', 'root'),
'password' => env('DB_PASSWORD_AUTH_ADMIN', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'prefix' => '',
'prefix_indexes' => true,
'search_path' => 'public',
'sslmode' => 'prefer',
'prefix' => '',
'prefix_indexes' => true,
'search_path' => 'public',
'sslmode' => 'prefer',
'timezone' => env('APP_TIMEZONE', 'utc' ),
],
], ],
/* /*

View File

@ -238,7 +238,7 @@ function addForm(){
id="perm_yes_${colCount}" id="perm_yes_${colCount}"
value="1" value="1"
required> required>
<label class="form-check-label" for="perm_yes_${colCount}">Iya</label> <label class="form-check-label" for="perm_yes_${colCount}">Ya</label>
</div> </div>
<div class="form-check mt-1"> <div class="form-check mt-1">

View File

@ -631,5 +631,5 @@ document.addEventListener('click', function(e){
function isPublic(permissionVal){ function isPublic(permissionVal){
if(permissionVal === null || permissionVal === undefined) return false; if(permissionVal === null || permissionVal === undefined) return false;
const val = String(permissionVal).toLowerCase(); const val = String(permissionVal).toLowerCase();
return val === '1' || val === 'true' || val === 'iya' || val === 'yes'; return val === '1' || val === 'true' || val === 'ya' || val === 'yes';
} }

View File

@ -930,7 +930,7 @@ document.addEventListener('DOMContentLoaded', () => {
id="perm_yes_${colCount}" id="perm_yes_${colCount}"
value="1" value="1"
required> required>
<label class="form-check-label" for="perm_yes_${colCount}">Iya</label> <label class="form-check-label" for="perm_yes_${colCount}">Ya</label>
</div> </div>
<div class="form-check mt-1"> <div class="form-check mt-1">
@ -1123,5 +1123,5 @@ document.addEventListener('click', function(e){
function isPublic(permissionVal){ function isPublic(permissionVal){
if(permissionVal === null || permissionVal === undefined) return false; if(permissionVal === null || permissionVal === undefined) return false;
const val = String(permissionVal).toLowerCase(); const val = String(permissionVal).toLowerCase();
return val === '1' || val === 'true' || val === 'iya' || val === 'yes'; return val === '1' || val === 'true' || val === 'ya' || val === 'yes';
} }

View File

@ -165,7 +165,7 @@
function isPublic(permissionVal){ function isPublic(permissionVal){
if(permissionVal === null || permissionVal === undefined) return false; if(permissionVal === null || permissionVal === undefined) return false;
const val = String(permissionVal).toLowerCase(); const val = String(permissionVal).toLowerCase();
return val === '1' || val === 'true' || val === 'iya' || val === 'yes'; return val === '1' || val === 'true' || val === 'ya' || val === 'yes';
} }
let currentFile = null; let currentFile = null;

View File

@ -66,6 +66,7 @@
</span> </span>
</div> </div>
<!-- Tambah Dokumen --> <!-- Tambah Dokumen -->
@if(!Auth::guard('admin')->check())
<button <button
type="button" type="button"
class="btn btn-success btn-sm" class="btn btn-success btn-sm"
@ -75,6 +76,7 @@
<i class="ti ti-plus me-1"></i> <i class="ti ti-plus me-1"></i>
Tambah Dokumen Tambah Dokumen
</button> </button>
@endif
</div> </div>
</div> </div>
<div class="d-flex flex-column flex-md-row align-items-md-center gap-2 mb-3"> <div class="d-flex flex-column flex-md-row align-items-md-center gap-2 mb-3">
@ -759,7 +761,7 @@
id="perm_yes_${colCount}" id="perm_yes_${colCount}"
value="1" value="1"
required> required>
<label class="form-check-label" for="perm_yes_${colCount}">Iya</label> <label class="form-check-label" for="perm_yes_${colCount}">Ya</label>
</div> </div>
<div class="form-check mt-1"> <div class="form-check mt-1">
<input class="form-check-input" <input class="form-check-input"

View File

@ -317,7 +317,7 @@
function isPublic(permissionVal){ function isPublic(permissionVal){
if(permissionVal === null || permissionVal === undefined) return false; if(permissionVal === null || permissionVal === undefined) return false;
const val = String(permissionVal).toLowerCase(); const val = String(permissionVal).toLowerCase();
return val === '1' || val === 'true' || val === 'iya' || val === 'yes'; return val === '1' || val === 'true' || val === 'ya' || val === 'yes';
} }
function resolveKategoriFlag(item){ function resolveKategoriFlag(item){

View File

@ -93,6 +93,7 @@
</span> </span>
</div> </div>
<!-- Tambah Dokumen --> <!-- Tambah Dokumen -->
@if(!Auth::guard('admin')->check())
<button <button
type="button" type="button"
class="btn btn-success btn-sm" class="btn btn-success btn-sm"
@ -102,6 +103,7 @@
<i class="ti ti-plus me-1"></i> <i class="ti ti-plus me-1"></i>
Tambah Dokumen Tambah Dokumen
</button> </button>
@endif
</div> </div>
</div> </div>
<div class="d-flex flex-column flex-md-row align-items-md-center gap-2 mb-3"> <div class="d-flex flex-column flex-md-row align-items-md-center gap-2 mb-3">
@ -447,7 +449,7 @@
function isPublic(permissionVal){ function isPublic(permissionVal){
if(permissionVal === null || permissionVal === undefined) return false; if(permissionVal === null || permissionVal === undefined) return false;
const val = String(permissionVal).toLowerCase(); const val = String(permissionVal).toLowerCase();
return val === '1' || val === 'true' || val === 'iya' || val === 'yes'; return val === '1' || val === 'true' || val === 'ya' || val === 'yes';
} }
function resolveKategoriFlag(item){ function resolveKategoriFlag(item){
@ -1084,7 +1086,7 @@
id="perm_yes_${colCount}" id="perm_yes_${colCount}"
value="1" value="1"
required> required>
<label class="form-check-label" for="perm_yes_${colCount}">Iya</label> <label class="form-check-label" for="perm_yes_${colCount}">Ya</label>
</div> </div>
<div class="form-check mt-1"> <div class="form-check mt-1">

View File

@ -65,7 +65,7 @@
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="radio" name="data[0][is_permission]" id="perm_yes" value="1" required> <input class="form-check-input" type="radio" name="data[0][is_permission]" id="perm_yes" value="1" required>
<label class="form-check-label" for="perm_yes"> <label class="form-check-label" for="perm_yes">
Iya Ya
</label> </label>
</div> </div>
<div class="form-check mt-1"> <div class="form-check mt-1">

View File

@ -101,7 +101,7 @@ function fetchRecap(){
}).join(''); }).join('');
tbody.innerHTML = html + ` tbody.innerHTML = html + `
<tr class="table-light"> <tr class="table-light">
<td colspan="4" class="text-end fw-semibold">Total File</td> <td colspan="3" class="text-end fw-semibold">Total File</td>
<td class="text-center fw-bold">${grandTotal}</td> <td class="text-center fw-bold">${grandTotal}</td>
</tr> </tr>
`; `;

View File

@ -41,7 +41,7 @@
<span class="hide-menu">Dokumen Umum</span> <span class="hide-menu">Dokumen Umum</span>
</a> </a>
</li> </li>
@if(auth()->user()->dataUser->mappingUnitKerjaPegawai()->where('objectunitkerjapegawaifk', 51)->exists()) @if(Auth::guard('admin')->check() || (Auth::check() && auth()->user()->dataUser->mappingUnitKerjaPegawai()->where('objectunitkerjapegawaifk', 51)->exists()))
<li class="sidebar-item"> <li class="sidebar-item">
<a class="sidebar-link" href="{{ url('/data-akreditasi') }}" aria-expanded="false"> <a class="sidebar-link" href="{{ url('/data-akreditasi') }}" aria-expanded="false">
<i class="fa-solid fa-sliders"></i> <i class="fa-solid fa-sliders"></i>
@ -51,35 +51,37 @@
@endif @endif
{{-- AKTIVITAS --}} {{-- AKTIVITAS --}}
<li class="nav-small-cap"><span class="hide-menu">Aktivitas</span></li> <li class="nav-small-cap"><span class="hide-menu">Aktivitas</span></li>
@php @php
$isAtasan = \App\Models\MappingUnitKerjaPegawai::where('statusenabled', true)->where('objectatasanlangsungfk', auth()->user()->objectpegawaifk)->exists(); $isAtasan = \App\Models\MappingUnitKerjaPegawai::where('statusenabled', true)->where('objectatasanlangsungfk', auth()->user()->objectpegawaifk)->exists();
@endphp @endphp
@if($isAtasan) @if($isAtasan)
<li class="sidebar-item"> @if(!Auth::guard('admin')->check())
<a class="sidebar-link d-flex align-items-center justify-content-between" <li class="sidebar-item">
href="{{ url('/pending-file') }}" aria-expanded="false"> <a class="sidebar-link d-flex align-items-center justify-content-between"
href="{{ url('/pending-file') }}" aria-expanded="false">
<div class="d-flex align-items-center gap-3"> <div class="d-flex align-items-center gap-3">
<i class="ti ti-clock"></i> <i class="ti ti-clock"></i>
<span class="hide-menu">Persetujuan</span> <span class="hide-menu">Persetujuan</span>
</div> </div>
<span class="badge bg-danger rounded-pill d-none" id="pendingCountBadge">0</span> <span class="badge bg-danger rounded-pill d-none" id="pendingCountBadge">0</span>
</a> </a>
</li> </li>
@endif
@else @else
<li class="sidebar-item"> @if(!Auth::guard('admin')->check())
<a class="sidebar-link d-flex align-items-center justify-content-between" <li class="sidebar-item">
href="{{ url('/pengajuan-file') }}" aria-expanded="false"> <a class="sidebar-link d-flex align-items-center justify-content-between"
href="{{ url('/pengajuan-file') }}" aria-expanded="false">
<div class="d-flex align-items-center gap-3"> <div class="d-flex align-items-center gap-3">
<i class="ti ti-clock"></i> <i class="ti ti-clock"></i>
<span class="hide-menu">Pengajuan</span> <span class="hide-menu">Pengajuan</span>
</div> </div>
</a> </a>
</li> </li>
@endif
@endif @endif
<li class="sidebar-item"> <li class="sidebar-item">
<a class="sidebar-link d-flex align-items-center justify-content-between" <a class="sidebar-link d-flex align-items-center justify-content-between"
@ -104,6 +106,7 @@
</li> --}} </li> --}}
{{-- MASTER --}} {{-- MASTER --}}
@if(!Auth::guard('admin')->check())
@if(auth()->user()->dataUser->mappingUnitKerjaPegawai()->where('objectunitkerjapegawaifk', 43)->exists()) @if(auth()->user()->dataUser->mappingUnitKerjaPegawai()->where('objectunitkerjapegawaifk', 43)->exists())
<li class="nav-small-cap"><span class="hide-menu">Master</span></li> <li class="nav-small-cap"><span class="hide-menu">Master</span></li>
@ -144,6 +147,7 @@
</ul> </ul>
</li> </li>
@endif @endif
@endif
</ul> </ul>
</nav> </nav>
</div> </div>

View File

@ -78,7 +78,7 @@
<div class="message-body"> <div class="message-body">
<a href="javascript:void(0)" class="d-flex align-items-center gap-2 dropdown-item"> <a href="javascript:void(0)" class="d-flex align-items-center gap-2 dropdown-item">
<i class="ti ti-user fs-6"></i> <i class="ti ti-user fs-6"></i>
<p class="mb-0 fs-3">{{ auth()->user()->namauser }}</p> <p class="mb-0 fs-3">{{ auth()->user()->namauser ?? 'admin' }}</p>
</a> </a>
<form action="/logout" method="POST"> <form action="/logout" method="POST">
@csrf @csrf

View File

@ -165,7 +165,7 @@ document.addEventListener('DOMContentLoaded', () => {
</tr> </tr>
`).join(''); `).join('');
const emptyState = logs.length === 0 ? '<tr><td colspan="4" class="text-center text-muted py-3">Belum ada aktivitas</td></tr>' : ''; const emptyState = logs.length === 0 ? '<tr><td colspan="5" class="text-center text-muted py-3">Belum ada aktivitas</td></tr>' : '';
if(tbody) tbody.innerHTML = logs.length ? rows : emptyState; if(tbody) tbody.innerHTML = logs.length ? rows : emptyState;
if(summaryText){ if(summaryText){

View File

@ -61,7 +61,7 @@
<div class="border rounded-3 p-2 bg-light"> <div class="border rounded-3 p-2 bg-light">
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="radio" name="permission_file" id="edit_perm_yes" value="1" required> <input class="form-check-input" type="radio" name="permission_file" id="edit_perm_yes" value="1" required>
<label class="form-check-label" for="edit_perm_yes">Iya</label> <label class="form-check-label" for="edit_perm_yes">Ya</label>
</div> </div>
<div class="form-check mt-1"> <div class="form-check mt-1">
<input class="form-check-input" type="radio" name="permission_file" id="edit_perm_no" value="0" required> <input class="form-check-input" type="radio" name="permission_file" id="edit_perm_no" value="0" required>

View File

@ -9,7 +9,7 @@ use App\Http\Controllers\LogActivityController;
use App\Http\Controllers\masterPersetujuanController; use App\Http\Controllers\masterPersetujuanController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::middleware(['auth'])->group(function(){ Route::middleware(['auth:admin,web'])->group(function(){
Route::get('/', [DashboardController::class, 'index']); Route::get('/', [DashboardController::class, 'index']);
Route::get('/data-internal', [DashboardController::class, 'dataUnitInternal']); Route::get('/data-internal', [DashboardController::class, 'dataUnitInternal']);