113 lines
3.3 KiB
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');
|
|
}
|
|
}
|