import fix for update so it does not insert person and client case

This commit is contained in:
Simon Pocrnjič
2025-10-16 20:11:45 +02:00
parent ed62311ba4
commit e782bcca7c
11 changed files with 393 additions and 54 deletions
@@ -4,7 +4,9 @@
use App\Http\Controllers\Controller;
use App\Http\Requests\StorePermissionRequest;
use App\Http\Requests\UpdatePermissionRequest;
use App\Models\Permission;
use App\Models\Role;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;
@@ -14,7 +16,7 @@ class PermissionController extends Controller
public function index(): Response
{
$permissions = Permission::query()
->select('id','name','slug','description','created_at')
->select('id', 'name', 'slug', 'description', 'created_at')
->orderBy('name')
->get();
@@ -22,15 +24,51 @@ public function index(): Response
'permissions' => $permissions,
]);
}
public function create(): Response
{
return Inertia::render('Admin/Permissions/Create');
$roles = Role::orderBy('name')->get(['id', 'name', 'slug']);
return Inertia::render('Admin/Permissions/Create', [
'roles' => $roles,
]);
}
public function store(StorePermissionRequest $request): RedirectResponse
{
Permission::create($request->validated());
$data = $request->validated();
$roleIds = $data['roles'] ?? [];
unset($data['roles']);
return redirect()->route('admin.index')->with('success', 'Dovoljenje ustvarjeno.');
$permission = Permission::create($data);
if (! empty($roleIds)) {
$permission->roles()->sync($roleIds);
}
return redirect()->route('admin.permissions.index')->with('success', 'Dovoljenje ustvarjeno.');
}
public function edit(Permission $permission): Response
{
$roles = Role::orderBy('name')->get(['id', 'name', 'slug']);
$selected = $permission->roles()->pluck('roles.id');
return Inertia::render('Admin/Permissions/Edit', [
'permission' => $permission->only('id', 'name', 'slug', 'description'),
'roles' => $roles,
'selectedRoleIds' => $selected,
]);
}
public function update(UpdatePermissionRequest $request, Permission $permission): RedirectResponse
{
$data = $request->validated();
$roleIds = $data['roles'] ?? [];
unset($data['roles']);
$permission->update($data);
$permission->roles()->sync($roleIds);
return redirect()->route('admin.permissions.index')->with('success', 'Dovoljenje posodobljeno.');
}
}
@@ -17,6 +17,8 @@ public function rules(): array
'name' => ['required', 'string', 'max:255'],
'slug' => ['required', 'string', 'max:255', 'alpha_dash', 'unique:permissions,slug'],
'description' => ['nullable', 'string', 'max:500'],
'roles' => ['sometimes', 'array'],
'roles.*' => ['integer', 'exists:roles,id'],
];
}
@@ -0,0 +1,36 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdatePermissionRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()?->hasPermission('manage-settings') || $this->user()?->hasRole('admin');
}
public function rules(): array
{
$permissionId = $this->route('permission')->id ?? null;
return [
'name' => ['required', 'string', 'max:255'],
'slug' => ['required', 'string', 'max:255', 'alpha_dash', Rule::unique('permissions', 'slug')->ignore($permissionId)],
'description' => ['nullable', 'string', 'max:500'],
'roles' => ['sometimes', 'array'],
'roles.*' => ['integer', 'exists:roles,id'],
];
}
public function messages(): array
{
return [
'name.required' => 'Ime je obvezno.',
'slug.required' => 'Slug je obvezen.',
'slug.unique' => 'Slug že obstaja.',
];
}
}