feat: implement modular contractor management and core administrative modules with feature-rich dashboard and UI components

This commit is contained in:
Ajjj
2026-08-24 15:24:47 +08:00
parent be79555bd0
commit 752b702d97
48 changed files with 6349 additions and 2212 deletions

View File

@@ -50,13 +50,23 @@ class ContractorController extends Controller
]);
}
private function ensureCanManageContractors(): void
{
$user = auth()->user();
if ($user && $user->hasAnyRole(['Site Technical', 'Construction Supervisor', 'Site Operations', 'Site Engineer', 'Site Supervisor', 'Field Engineer', 'Safety Officer', 'Quality Inspector', 'Warehouse Staff'])) {
abort(403, 'Unauthorized action. Site Operations roles cannot modify contractors.');
}
}
public function create()
{
$this->ensureCanManageContractors();
return Inertia::render('ContractorManagement::Contractors/Create');
}
public function store(Request $request)
{
$this->ensureCanManageContractors();
$validated = $request->validate([
'company_name' => 'required|string|max:255',
'contact_person' => 'required|string|max:255',
@@ -149,6 +159,7 @@ class ContractorController extends Controller
public function edit(Contractor $contractor)
{
$this->ensureCanManageContractors();
return Inertia::render('ContractorManagement::Contractors/Edit', [
'contractor' => $contractor,
]);
@@ -156,6 +167,7 @@ class ContractorController extends Controller
public function update(Request $request, Contractor $contractor)
{
$this->ensureCanManageContractors();
$validated = $request->validate([
'company_name' => 'required|string|max:255',
'contact_person' => 'required|string|max:255',
@@ -175,6 +187,7 @@ class ContractorController extends Controller
public function destroy(Contractor $contractor)
{
$this->ensureCanManageContractors();
$contractor->delete();
return redirect()->route('contractors.index')->with('success', 'Contractor deleted.');
}