Add viewer access to records and restrict activity log
Deploy / deploy (push) Successful in 16s

- canView() + canViewAny() in EnforcesRoles: all SMS roles can view
- View pages for all 7 resources so viewers can open records read-only
- Custom ActivityResource restricts activity log to admin + manager only

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Malek TellissiandClaude Sonnet 4.6 committed 2026-09-13 02:44:00 +02:00
1 parent 596d66b366
commit 1494273efd
17 files changed
+106 -1

No files matched your search

@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources;
class ActivityResource extends \Z3d0X\FilamentLogger\Resources\ActivityResource
{
public static function canViewAny(): bool
{
return auth()->user()?->hasAnyRole(['sms-admin', 'sms-manager']) ?? false;
}
}
@@ -82,6 +82,7 @@ class PackingResource extends Resource
return [
'index' => Pages\ListPackings::route('/'),
'create' => Pages\CreatePacking::route('/create'),
'view' => Pages\ViewPacking::route('/{record}'),
'edit' => Pages\EditPacking::route('/{record}/edit'),
];
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\PackingResource\Pages;
use App\Filament\User\Resources\PackingResource;
use Filament\Resources\Pages\ViewRecord;
class ViewPacking extends ViewRecord
{
protected static string $resource = PackingResource::class;
}
@@ -108,6 +108,7 @@ class ProductInventoryResource extends Resource
return [
'index' => Pages\ListProductInventory::route('/'),
'create' => Pages\CreateProductInventory::route('/create'),
'view' => Pages\ViewProductInventory::route('/{record}'),
'edit' => Pages\EditProductInventory::route('/{record}/edit'),
];
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\ProductInventoryResource\Pages;
use App\Filament\User\Resources\ProductInventoryResource;
use Filament\Resources\Pages\ViewRecord;
class ViewProductInventory extends ViewRecord
{
protected static string $resource = ProductInventoryResource::class;
}
@@ -242,6 +242,7 @@ class ProductResource extends Resource {
return [
'index' => Pages\ListProducts::route('/'),
'create' => Pages\CreateProduct::route('/create'),
'view' => Pages\ViewProduct::route('/{record}'),
'edit' => Pages\EditProduct::route('/{record}/edit'),
'recipe-history' => Pages\RecipeHistory::route('/{record}/rezept-versionen'),
];
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\ProductResource\Pages;
use App\Filament\User\Resources\ProductResource;
use Filament\Resources\Pages\ViewRecord;
class ViewProduct extends ViewRecord
{
protected static string $resource = ProductResource::class;
}
@@ -115,6 +115,7 @@ class ProductSaleResource extends Resource {
return [
'index' => Pages\ListProductSales::route('/'),
'create' => Pages\CreateProductSale::route('/create'),
'view' => Pages\ViewProductSale::route('/{record}'),
'edit' => Pages\EditProductSale::route('/{record}/edit'),
];
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\ProductSaleResource\Pages;
use App\Filament\User\Resources\ProductSaleResource;
use Filament\Resources\Pages\ViewRecord;
class ViewProductSale extends ViewRecord
{
protected static string $resource = ProductSaleResource::class;
}
@@ -94,6 +94,7 @@ class SpiceResource extends Resource
return [
'index' => Pages\ListSpices::route('/'),
'create' => Pages\CreateSpice::route('/create'),
'view' => Pages\ViewSpice::route('/{record}'),
'edit' => Pages\EditSpice::route('/{record}/edit'),
];
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\SpiceResource\Pages;
use App\Filament\User\Resources\SpiceResource;
use Filament\Resources\Pages\ViewRecord;
class ViewSpice extends ViewRecord
{
protected static string $resource = SpiceResource::class;
}
@@ -163,6 +163,7 @@ class SpiceSupplierResource extends Resource
return [
'index' => Pages\ListSpiceSuppliers::route('/'),
'create' => Pages\CreateSpiceSupplier::route('/create'),
'view' => Pages\ViewSpiceSupplier::route('/{record}'),
'edit' => Pages\EditSpiceSupplier::route('/{record}/edit'),
];
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\SpiceSupplierResource\Pages;
use App\Filament\User\Resources\SpiceSupplierResource;
use Filament\Resources\Pages\ViewRecord;
class ViewSpiceSupplier extends ViewRecord
{
protected static string $resource = SpiceSupplierResource::class;
}
@@ -100,6 +100,7 @@ class SupplierResource extends Resource
return [
'index' => Pages\ListSuppliers::route('/'),
'create' => Pages\CreateSupplier::route('/create'),
'view' => Pages\ViewSupplier::route('/{record}'),
'edit' => Pages\EditSupplier::route('/{record}/edit'),
];
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\User\Resources\SupplierResource\Pages;
use App\Filament\User\Resources\SupplierResource;
use Filament\Resources\Pages\ViewRecord;
class ViewSupplier extends ViewRecord
{
protected static string $resource = SupplierResource::class;
}
+10
View File
@@ -6,6 +6,16 @@ use Illuminate\Database\Eloquent\Model;
trait EnforcesRoles
{
public static function canViewAny(): bool
{
return auth()->user()?->hasAnyRole(['sms-admin', 'sms-manager', 'sms-viewer']) ?? false;
}
public static function canView(Model $record): bool
{
return auth()->user()?->hasAnyRole(['sms-admin', 'sms-manager', 'sms-viewer']) ?? false;
}
public static function canCreate(): bool
{
return auth()->user()?->hasAnyRole(['sms-admin', 'sms-manager']) ?? false;