b2in/app/Policies/ProductPolicy.php
2026-02-20 17:57:50 +01:00

73 lines
1.8 KiB
PHP

<?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');
}
}