feat: aggiungi supporto per superadmin in diverse risorse e aggiorna il modello utente
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Concerns;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Rende la risorsa visibile e accessibile solo al superadmin
|
||||
* (menù, pagine e azioni: lista, crea, modifica, elimina).
|
||||
*/
|
||||
trait SoloSuperadmin
|
||||
{
|
||||
protected static function isSuperadmin(): bool
|
||||
{
|
||||
return (bool) auth()->user()?->is_superadmin;
|
||||
}
|
||||
|
||||
public static function canAccess(): bool
|
||||
{
|
||||
return static::isSuperadmin() && parent::canAccess();
|
||||
}
|
||||
|
||||
public static function can(string $action, ?Model $record = null): bool
|
||||
{
|
||||
return static::isSuperadmin() && parent::can($action, $record);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
use App\Filament\Resources\FinituraResource\Pages;
|
||||
use App\Filament\Support\CampiConfiguratore;
|
||||
use App\Models\Finitura;
|
||||
@@ -14,8 +15,11 @@ use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Validation\Rules\Unique;
|
||||
|
||||
|
||||
class FinituraResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
protected static ?string $model = Finitura::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-swatch';
|
||||
|
||||
@@ -10,10 +10,14 @@ use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
|
||||
/** Gruppi di opzioni del configuratore: un nuovo gruppo si crea qui, le sue voci in "Opzioni e supplementi". */
|
||||
|
||||
class GruppoOpzioniResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
protected static ?string $model = GruppoOpzioni::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-queue-list';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
use App\Filament\Resources\ModelloResource\Pages;
|
||||
use App\Filament\Resources\ModelloResource\RelationManagers\FinitureRelationManager;
|
||||
use App\Filament\Resources\ModelloResource\RelationManagers\ListinoRelationManager;
|
||||
@@ -16,8 +17,11 @@ use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Validation\Rules\Unique;
|
||||
|
||||
|
||||
class ModelloResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
protected static ?string $model = Modello::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-squares-2x2';
|
||||
|
||||
@@ -17,10 +17,14 @@ use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Validation\Rules\Unique;
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
|
||||
/** Opzioni e supplementi del sistema (le personalizzazioni per modello sono nella scheda del modello). */
|
||||
|
||||
class OpzioneResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
/** Voce "Altro" del valore nelle opzioni personalizzate: valore scritto a mano. */
|
||||
public const ALTRO = '__altro';
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
use App\Filament\Resources\RegolaVetroResource\Pages;
|
||||
use App\Filament\Support\CampiConfiguratore;
|
||||
use App\Models\RegolaVetro;
|
||||
@@ -14,8 +15,11 @@ use Filament\Tables\Table;
|
||||
use Illuminate\Support\HtmlString;
|
||||
use Illuminate\Validation\Rules\Unique;
|
||||
|
||||
|
||||
class RegolaVetroResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
protected static ?string $model = RegolaVetro::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-calculator';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
use App\Filament\Resources\SistemaResource\Actions\ImportaListiniAction;
|
||||
use App\Filament\Resources\SistemaResource\Pages;
|
||||
use App\Models\Sistema;
|
||||
@@ -11,8 +12,11 @@ use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
|
||||
|
||||
class SistemaResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
protected static ?string $model = Sistema::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Concerns\SoloSuperadmin;
|
||||
use App\Filament\Resources\VetroResource\Pages;
|
||||
use App\Filament\Support\CampiConfiguratore;
|
||||
use App\Models\Vetro;
|
||||
@@ -13,8 +14,11 @@ use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Validation\Rules\Unique;
|
||||
|
||||
|
||||
class VetroResource extends Resource
|
||||
{
|
||||
use SoloSuperadmin;
|
||||
|
||||
protected static ?string $model = Vetro::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-square-2-stack';
|
||||
|
||||
@@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
#[Fillable(['name', 'email', 'password'])]
|
||||
#[Fillable(['name', 'email', 'password', 'is_superadmin'])]
|
||||
#[Hidden(['password', 'remember_token'])]
|
||||
class User extends Authenticatable
|
||||
{
|
||||
@@ -27,6 +27,7 @@ class User extends Authenticatable
|
||||
return [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
'is_superadmin' => 'boolean',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ class AdminPanelProvider extends PanelProvider
|
||||
->id('admin')
|
||||
->path('admin')
|
||||
->login()
|
||||
->profile(isSimple: false)
|
||||
->brandName('Krèios')
|
||||
->brandLogo(asset('images/kreios-logo.jpg'))
|
||||
->brandLogoHeight('2.5rem')
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->boolean('is_superadmin')->default(false)->after('password');
|
||||
});
|
||||
|
||||
// Superadmin iniziale: password provvisoria, da cambiare dal profilo.
|
||||
if (! DB::table('users')->where('email', 'admin@aurealab.net')->exists()) {
|
||||
DB::table('users')->insert([
|
||||
'name' => 'Superadmin',
|
||||
'email' => 'admin@aurealab.net',
|
||||
'password' => Hash::make('Aurealab-Kreios-2026!'),
|
||||
'is_superadmin' => true,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
} else {
|
||||
DB::table('users')->where('email', 'admin@aurealab.net')->update(['is_superadmin' => true]);
|
||||
}
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
DB::table('users')->where('email', 'admin@aurealab.net')->delete();
|
||||
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('is_superadmin');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -14,7 +14,7 @@ class DatabaseSeeder extends Seeder
|
||||
public function run(): void
|
||||
{
|
||||
// Utente amministratore del backoffice.
|
||||
User::updateOrCreate(
|
||||
User::firstOrCreate(
|
||||
['email' => 'admin@kreiosinfissi.it'],
|
||||
[
|
||||
'name' => 'Amministratore',
|
||||
@@ -22,6 +22,16 @@ class DatabaseSeeder extends Seeder
|
||||
]
|
||||
);
|
||||
|
||||
// Superadmin: vede anche le sezioni Prodotti e Configuratore.
|
||||
User::firstOrCreate(
|
||||
['email' => 'admin@aurealab.net'],
|
||||
[
|
||||
'name' => 'Superadmin',
|
||||
'password' => Hash::make('Aurealab-Kreios-2026!'),
|
||||
'is_superadmin' => true,
|
||||
]
|
||||
);
|
||||
|
||||
$this->call([CatalogoSeeder::class, ConfiguratoreSeeder::class, ProfiliExtraSeeder::class, NuoveOpzioniSeeder::class]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user