dress/app/Http/Controllers/Admin/System/RoleController.php

113 lines
3.3 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\System;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\System\RoleRequest;
use App\Support\LogHelper;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleController extends Controller
{
public function index(): Response
{
return Inertia::render('admin/system/role/index', [
'roles' => Role::with('permissions')->latest()->get(),
]);
}
public function create(): Response
{
return Inertia::render('admin/system/role/create', [
'permissions' => Permission::all(),
]);
}
public function store(RoleRequest $request): RedirectResponse
{
$validated = $request->validated();
try {
DB::transaction(function () use ($validated) {
$role = Role::create([
'name' => $validated['name'],
'guard_name' => $validated['guard_name'],
]);
$role->syncPermissions($validated['permissions'] ?? []);
});
return redirect()->route('system.role.index')->with('success', 'Data berhasil disimpan');
} catch (\Throwable $e) {
LogHelper::logException($e, 'Failed to store role', [
'name' => $validated['name'] ?? null,
]);
return redirect()
->back()
->withInput()
->with('error', 'Terjadi kesalahan, silakan hubungi pengembang');
}
}
public function edit(Role $role): Response
{
$role->load('permissions');
return Inertia::render('admin/system/role/edit', [
'role' => $role,
'permissions' => Permission::all(),
]);
}
public function update(RoleRequest $request, Role $role): RedirectResponse
{
$validated = $request->validated();
try {
DB::transaction(function () use ($role, $validated) {
$role->update([
'name' => $validated['name'],
'guard_name' => $validated['guard_name'],
]);
$role->syncPermissions($validated['permissions'] ?? []);
});
return redirect()->route('system.role.index')->with('success', 'Data berhasil diperbarui');
} catch (\Throwable $e) {
LogHelper::logException($e, 'Failed to update role', [
'role_id' => $role->id,
'name' => $validated['name'] ?? null,
]);
return redirect()
->back()
->withInput()
->with('error', 'Terjadi kesalahan, silakan hubungi pengembang');
}
}
public function destroy(Role $role): RedirectResponse
{
$role->delete();
return redirect()->back()->with('success', 'Data berhasil dihapus');
}
public function bulkDestroy(Request $request): RedirectResponse
{
$ids = $request->input('ids');
Role::whereIn('id', $ids)->delete();
return redirect()->back()->with('success', 'Data terpilih berhasil dihapus');
}
}