Example of Custom validation rules in JustinByrne/Mealing

File app/Rules/CurrentPasswordRule.php (link to Github)
class CurrentPasswordRule implements Rule
{
    public function passes($attribute, $value)
    {
        if (!Hash::check($value, Auth::User()->password))   {
            return false;
        }
        
        return true;
    }

    public function message()
    {
        return 'Users details don\'t match our records.';
    }
}
File app/Http/Requests/ChangePasswordRequest.php (link to Github)
class ChangePasswordRequest extends FormRequest
{
    // ...

    public function rules()
    {
        return [
            'current' => ['required', new CurrentPasswordRule ],
            'password' => ['required', 'confirmed']
        ];
    }
}
File app/Http/Controllers/ProfileController.php (link to Github)
// ... other use statements
use App\Http\Requests\ChangePasswordRequest;

class ProfileController extends Controller
{
    // ... other methods

    public function password(ChangePasswordRequest $request): RedirectResponse
    {
        $user = Auth::User();

        $user->update([
            'password' => Hash::make($request['password'])
        ]);

        return redirect(route('profile.settings.account'))->with('passwordStatus', 'Password Changed Successfully');
    }
}

Additional resources on custom validation rules: