Replace all uses of `forceFill`, `forceCreate`, and `forceFill` with their non-force equivalents across models, actions, controllers, and Livewire components. Add explicit `$fillable` arrays to all affected Eloquent models to enforce mass assignment protection. Add ModelFillableCreationTest and ModelFillableRegressionTest to verify that model creation respects fillable constraints and prevent regressions.
60 lines
1.6 KiB
PHP
60 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Actions\Fortify;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\Rule;
|
|
use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;
|
|
|
|
class UpdateUserProfileInformation implements UpdatesUserProfileInformation
|
|
{
|
|
/**
|
|
* Validate and update the given user's profile information.
|
|
*
|
|
* @param array<string, string> $input
|
|
*/
|
|
public function update(User $user, array $input): void
|
|
{
|
|
Validator::make($input, [
|
|
'name' => ['required', 'string', 'max:255'],
|
|
|
|
'email' => [
|
|
'required',
|
|
'string',
|
|
'email',
|
|
'max:255',
|
|
Rule::unique('users')->ignore($user->id),
|
|
],
|
|
])->validateWithBag('updateProfileInformation');
|
|
|
|
if (
|
|
$input['email'] !== $user->email &&
|
|
$user instanceof MustVerifyEmail
|
|
) {
|
|
$this->updateVerifiedUser($user, $input);
|
|
} else {
|
|
$user->fill([
|
|
'name' => $input['name'],
|
|
'email' => $input['email'],
|
|
])->save();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update the given verified user's profile information.
|
|
*
|
|
* @param array<string, string> $input
|
|
*/
|
|
protected function updateVerifiedUser(User $user, array $input): void
|
|
{
|
|
$user->fill([
|
|
'name' => $input['name'],
|
|
'email' => $input['email'],
|
|
'email_verified_at' => null,
|
|
])->save();
|
|
|
|
$user->sendEmailVerificationNotification();
|
|
}
|
|
}
|