20-02-2026

This commit is contained in:
Kevin Adametz 2026-02-20 17:57:50 +01:00
parent 854ce02bf6
commit 4d6b4930b2
128 changed files with 18247 additions and 2093 deletions

View file

@ -0,0 +1,67 @@
<?php
namespace App\Policies;
use App\Models\Partner;
use App\Models\User;
class PartnerPolicy
{
/**
* Admins und Super-Admins können alle Partner sehen.
* Partner können nur ihren eigenen Eintrag sehen.
*/
public function viewAny(User $user): bool
{
return $user->hasAnyRole(['Admin', 'Super-Admin']);
}
/**
* Admins sehen alle Partner; Partner sehen ihren eigenen Eintrag.
*/
public function view(User $user, Partner $partner): bool
{
if ($user->hasAnyRole(['Admin', 'Super-Admin'])) {
return true;
}
return $user->partner_id === $partner->id;
}
/**
* Nur Admins können neue Partner direkt anlegen (normale Partner werden eingeladen).
*/
public function create(User $user): bool
{
return $user->hasAnyRole(['Admin', 'Super-Admin']);
}
/**
* Admins können jeden Partner bearbeiten.
* Partner können ihr eigenes Profil bearbeiten.
*/
public function update(User $user, Partner $partner): bool
{
if ($user->hasAnyRole(['Admin', 'Super-Admin'])) {
return true;
}
return $user->partner_id === $partner->id;
}
/**
* Nur Admins können Partner löschen.
*/
public function delete(User $user, Partner $partner): bool
{
return $user->hasAnyRole(['Admin', 'Super-Admin']);
}
/**
* Produkte eines Partners kuratieren (freigeben/ablehnen).
*/
public function curateProducts(User $user): bool
{
return $user->hasPermissionTo('curate products');
}
}

View file

@ -0,0 +1,73 @@
<?php
namespace App\Policies;
use App\Models\Product;
use App\Models\User;
class ProductPolicy
{
/**
* Admins, Retailer und Manufacturer können Produkte sehen.
*/
public function viewAny(User $user): bool
{
return $user->hasAnyRole(['Admin', 'Super-Admin', 'Retailer', 'Manufacturer']);
}
/**
* Admins sehen alle Produkte; Partner sehen nur ihre eigenen.
*/
public function view(User $user, Product $product): bool
{
if ($user->hasAnyRole(['Admin', 'Super-Admin'])) {
return true;
}
return $product->partner_id === $user->partner_id;
}
/**
* Retailer dürfen Teaser-Produkte (Typ A) anlegen.
* Manufacturer dürfen Konfigurations-Produkte (Typ B) anlegen.
* Admins dürfen beide Typen anlegen.
*/
public function create(User $user): bool
{
return $user->hasAnyRole(['Admin', 'Super-Admin', 'Retailer', 'Manufacturer']);
}
/**
* Admins können alle Produkte bearbeiten.
* Partner können nur ihre eigenen Produkte bearbeiten.
*/
public function update(User $user, Product $product): bool
{
if ($user->hasAnyRole(['Admin', 'Super-Admin'])) {
return true;
}
return $product->partner_id === $user->partner_id;
}
/**
* Admins können alle Produkte löschen.
* Partner können nur ihre eigenen Produkte löschen.
*/
public function delete(User $user, Product $product): bool
{
if ($user->hasAnyRole(['Admin', 'Super-Admin'])) {
return true;
}
return $product->partner_id === $user->partner_id;
}
/**
* Nur Admins können Produkte kuratieren (freigeben/ablehnen).
*/
public function curate(User $user): bool
{
return $user->hasPermissionTo('curate products');
}
}