mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-app.git
synced 2026-06-17 16:40:31 +00:00
e55967e9ac
- 🔒 Introduce `removeFromMine` policy for authenticated users to remove meetups. - ✏️ Add `removeFromMine` method in `MeetupController` with idempotent handling. - ✨ Add `removeMember` utility in `Meetup` model for managing pivot relationships. - 🧪 Add feature tests for `removeFromMine`, covering idempotency, permissions, and unknown slugs. - 🌐 Register `removeFromMine` route in API and link it to `MeetupController`.
78 lines
2.4 KiB
PHP
78 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Policies;
|
|
|
|
use App\Models\Meetup;
|
|
use App\Models\User;
|
|
use App\Policies\Concerns\ChecksCreatorOwnership;
|
|
|
|
class MeetupPolicy
|
|
{
|
|
use ChecksCreatorOwnership;
|
|
|
|
public function viewAny(User $user): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function view(User $user, Meetup $meetup): bool
|
|
{
|
|
return $this->owns($user, $meetup);
|
|
}
|
|
|
|
/**
|
|
* Sichtbarkeit der „Meine Meetups"-Detailansicht: Neben dem Ersteller darf
|
|
* jedes Mitglied der meetup_user-Pivot („Meine Meetups" im Dashboard) das
|
|
* abonnierte Meetup über die REST-API ansehen. Spiegelt die Listen-Semantik
|
|
* von MeetupController::mine(), die ebenfalls die Pivot-Mitgliedschaft nutzt.
|
|
*/
|
|
public function viewMine(User $user, Meetup $meetup): bool
|
|
{
|
|
return $this->owns($user, $meetup) || $meetup->hasMember($user);
|
|
}
|
|
|
|
public function create(User $user): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Ein bestehendes Meetup zu „Meine Meetups" hinzufügen (meetup_user-Pivot als
|
|
* Mitglied, nicht als Leader). Jeder authentifizierte Nutzer darf das — die
|
|
* Stammdaten bleiben dem Ersteller vorbehalten (siehe update()). Spiegelt die
|
|
* offene Semantik des AddMeetupToMineTool (MCP).
|
|
*/
|
|
public function addToMine(User $user, Meetup $meetup): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Ein Meetup wieder aus „Meine Meetups" entfernen (löst die meetup_user-Pivot
|
|
* des Nutzers). Spiegelt die offene Semantik von addToMine(): jeder
|
|
* authentifizierte Nutzer darf seine eigene Zuordnung lösen. Die Stammdaten
|
|
* bleiben dem Ersteller vorbehalten (siehe update()).
|
|
*/
|
|
public function removeFromMine(User $user, Meetup $meetup): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function update(User $user, Meetup $meetup): bool
|
|
{
|
|
return $this->owns($user, $meetup);
|
|
}
|
|
|
|
/**
|
|
* Gelockerte Update-Regel ausschließlich für das Portal-Frontend (Livewire):
|
|
* Neben dem Ersteller darf auch jedes Mitglied der meetup_user-Pivot
|
|
* („Meine Meetups" im Dashboard) die Stammdaten bearbeiten. REST-API und
|
|
* MCP nutzen weiterhin die strikte update()-Ability. Übergangslösung, bis
|
|
* ein echtes Rollen-/Freigabekonzept existiert.
|
|
*/
|
|
public function updateViaPortal(User $user, Meetup $meetup): bool
|
|
{
|
|
return $this->owns($user, $meetup) || $meetup->hasMember($user);
|
|
}
|
|
}
|