input('status')); if ($status === null) { return false; } $permissions = config('order-status.permissions', []); $permission = $permissions[$status->value] ?? null; return $permission ? ($this->user()?->can($permission->value) ?? false) : false; } /** * @return array */ public function rules(): array { return [ 'status' => ['required', Rule::enum(OrderStatus::class)], ]; } /** * @return array */ public function attributes(): array { return [ 'status' => 'status', ]; } public function withValidator(Validator $validator): void { $validator->after(function (Validator $validator): void { /** @var Order $order */ $order = $this->route('order'); $status = OrderStatus::tryFrom((string) $this->input('status')); if ($status === null) { return; } $transitions = config('order-status.transitions', []); $allowedTargets = $transitions[$order->status->value] ?? []; if (! in_array($status, $allowedTargets, true)) { $validator->errors()->add('status', 'Status pesanan tidak dapat diubah.'); } }); } }