Kundenhoheit: E-Mail-Aenderung mit Bestaetigung, Zuordnungsfehler behoben, Admin-Uebersicht
- E-Mail-Aenderung durch Berater wird erst nach Bestaetigung durch den Kunden aktiv (Link an die neue Adresse, Portal kunde/email-bestaetigen); danach ziehen alle Eintraege des Kunden und seine Abos mit. Admins aendern direkt. - Kundenhoheit: E-Mail eines Beraterkontos oder eines Kunden eines anderen Beraters wird abgelehnt (beim Speichern und bei der Bestaetigung). - Fix CustomerPriority::entryExists: aelteste gepruefte Zuordnung gilt, Eintraege in Pruefung (is_like) dienen nicht mehr als Vorlage. - "Berater zuweisen" voreingestellt auf alle Bestellungen des Kunden. - Neue Admin-Seite Kundenhoheit: offene Pruefungen, Kunden bei mehreren Beratern, abgelehnte/offene E-Mail-Aenderungen; Zaehler im Menue. - Neue Tabelle shopping_user_email_changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
ae59679150
commit
9ad69a3218
32 changed files with 2246 additions and 119 deletions
43
app/Http/Controllers/Web/CustomerEmailChangeController.php
Normal file
43
app/Http/Controllers/Web/CustomerEmailChangeController.php
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\CustomerEmailChangeService;
|
||||
use Illuminate\Contracts\View\View;
|
||||
|
||||
/**
|
||||
* Login-free confirmation of a new customer e-mail address via the tokenized link in the
|
||||
* confirmation mail. GET only shows the page; the change is applied on POST, so mail
|
||||
* scanners that open links cannot confirm on the customer's behalf.
|
||||
*/
|
||||
class CustomerEmailChangeController extends Controller
|
||||
{
|
||||
public function show(string $token, CustomerEmailChangeService $service): View
|
||||
{
|
||||
$change = $service->findConfirmable($token);
|
||||
if (! $change) {
|
||||
return view('portal.customer.email_change_done', ['status' => CustomerEmailChangeService::STATUS_INVALID]);
|
||||
}
|
||||
|
||||
if ($change->shopping_user && $service->ownershipConflict($change->shopping_user, $change->new_email)) {
|
||||
return view('portal.customer.email_change_done', ['status' => CustomerEmailChangeService::STATUS_CONFLICT]);
|
||||
}
|
||||
|
||||
return view('portal.customer.email_change_confirm', [
|
||||
'change' => $change,
|
||||
'token' => $token,
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(string $token, CustomerEmailChangeService $service): View
|
||||
{
|
||||
$change = $service->findConfirmable($token);
|
||||
$status = $change ? $service->confirm($change) : CustomerEmailChangeService::STATUS_INVALID;
|
||||
|
||||
return view('portal.customer.email_change_done', [
|
||||
'status' => $status,
|
||||
'email' => $status === CustomerEmailChangeService::STATUS_CONFIRMED ? $change->new_email : null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue