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;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Filament\Concerns\SoloSuperadmin;
|
||||||
use App\Filament\Resources\FinituraResource\Pages;
|
use App\Filament\Resources\FinituraResource\Pages;
|
||||||
use App\Filament\Support\CampiConfiguratore;
|
use App\Filament\Support\CampiConfiguratore;
|
||||||
use App\Models\Finitura;
|
use App\Models\Finitura;
|
||||||
@@ -14,8 +15,11 @@ use Filament\Tables\Table;
|
|||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
|
||||||
|
|
||||||
class FinituraResource extends Resource
|
class FinituraResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
protected static ?string $model = Finitura::class;
|
protected static ?string $model = Finitura::class;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-swatch';
|
protected static ?string $navigationIcon = 'heroicon-o-swatch';
|
||||||
|
|||||||
@@ -10,10 +10,14 @@ use Filament\Forms\Form;
|
|||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Tables\Table;
|
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". */
|
/** Gruppi di opzioni del configuratore: un nuovo gruppo si crea qui, le sue voci in "Opzioni e supplementi". */
|
||||||
|
|
||||||
class GruppoOpzioniResource extends Resource
|
class GruppoOpzioniResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
protected static ?string $model = GruppoOpzioni::class;
|
protected static ?string $model = GruppoOpzioni::class;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-queue-list';
|
protected static ?string $navigationIcon = 'heroicon-o-queue-list';
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Filament\Concerns\SoloSuperadmin;
|
||||||
use App\Filament\Resources\ModelloResource\Pages;
|
use App\Filament\Resources\ModelloResource\Pages;
|
||||||
use App\Filament\Resources\ModelloResource\RelationManagers\FinitureRelationManager;
|
use App\Filament\Resources\ModelloResource\RelationManagers\FinitureRelationManager;
|
||||||
use App\Filament\Resources\ModelloResource\RelationManagers\ListinoRelationManager;
|
use App\Filament\Resources\ModelloResource\RelationManagers\ListinoRelationManager;
|
||||||
@@ -16,8 +17,11 @@ use Filament\Tables\Table;
|
|||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
|
||||||
|
|
||||||
class ModelloResource extends Resource
|
class ModelloResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
protected static ?string $model = Modello::class;
|
protected static ?string $model = Modello::class;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-squares-2x2';
|
protected static ?string $navigationIcon = 'heroicon-o-squares-2x2';
|
||||||
|
|||||||
@@ -17,10 +17,14 @@ use Filament\Tables\Table;
|
|||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
use App\Filament\Concerns\SoloSuperadmin;
|
||||||
|
|
||||||
/** Opzioni e supplementi del sistema (le personalizzazioni per modello sono nella scheda del modello). */
|
/** Opzioni e supplementi del sistema (le personalizzazioni per modello sono nella scheda del modello). */
|
||||||
|
|
||||||
class OpzioneResource extends Resource
|
class OpzioneResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
/** Voce "Altro" del valore nelle opzioni personalizzate: valore scritto a mano. */
|
/** Voce "Altro" del valore nelle opzioni personalizzate: valore scritto a mano. */
|
||||||
public const ALTRO = '__altro';
|
public const ALTRO = '__altro';
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Filament\Concerns\SoloSuperadmin;
|
||||||
use App\Filament\Resources\RegolaVetroResource\Pages;
|
use App\Filament\Resources\RegolaVetroResource\Pages;
|
||||||
use App\Filament\Support\CampiConfiguratore;
|
use App\Filament\Support\CampiConfiguratore;
|
||||||
use App\Models\RegolaVetro;
|
use App\Models\RegolaVetro;
|
||||||
@@ -14,8 +15,11 @@ use Filament\Tables\Table;
|
|||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
|
||||||
|
|
||||||
class RegolaVetroResource extends Resource
|
class RegolaVetroResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
protected static ?string $model = RegolaVetro::class;
|
protected static ?string $model = RegolaVetro::class;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-calculator';
|
protected static ?string $navigationIcon = 'heroicon-o-calculator';
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Filament\Concerns\SoloSuperadmin;
|
||||||
use App\Filament\Resources\SistemaResource\Actions\ImportaListiniAction;
|
use App\Filament\Resources\SistemaResource\Actions\ImportaListiniAction;
|
||||||
use App\Filament\Resources\SistemaResource\Pages;
|
use App\Filament\Resources\SistemaResource\Pages;
|
||||||
use App\Models\Sistema;
|
use App\Models\Sistema;
|
||||||
@@ -11,8 +12,11 @@ use Filament\Resources\Resource;
|
|||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
|
||||||
class SistemaResource extends Resource
|
class SistemaResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
protected static ?string $model = Sistema::class;
|
protected static ?string $model = Sistema::class;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources;
|
namespace App\Filament\Resources;
|
||||||
|
|
||||||
|
use App\Filament\Concerns\SoloSuperadmin;
|
||||||
use App\Filament\Resources\VetroResource\Pages;
|
use App\Filament\Resources\VetroResource\Pages;
|
||||||
use App\Filament\Support\CampiConfiguratore;
|
use App\Filament\Support\CampiConfiguratore;
|
||||||
use App\Models\Vetro;
|
use App\Models\Vetro;
|
||||||
@@ -13,8 +14,11 @@ use Filament\Tables;
|
|||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
|
||||||
|
|
||||||
class VetroResource extends Resource
|
class VetroResource extends Resource
|
||||||
{
|
{
|
||||||
|
use SoloSuperadmin;
|
||||||
|
|
||||||
protected static ?string $model = Vetro::class;
|
protected static ?string $model = Vetro::class;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-square-2-stack';
|
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\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
|
|
||||||
#[Fillable(['name', 'email', 'password'])]
|
#[Fillable(['name', 'email', 'password', 'is_superadmin'])]
|
||||||
#[Hidden(['password', 'remember_token'])]
|
#[Hidden(['password', 'remember_token'])]
|
||||||
class User extends Authenticatable
|
class User extends Authenticatable
|
||||||
{
|
{
|
||||||
@@ -27,6 +27,7 @@ class User extends Authenticatable
|
|||||||
return [
|
return [
|
||||||
'email_verified_at' => 'datetime',
|
'email_verified_at' => 'datetime',
|
||||||
'password' => 'hashed',
|
'password' => 'hashed',
|
||||||
|
'is_superadmin' => 'boolean',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class AdminPanelProvider extends PanelProvider
|
|||||||
->id('admin')
|
->id('admin')
|
||||||
->path('admin')
|
->path('admin')
|
||||||
->login()
|
->login()
|
||||||
|
->profile(isSimple: false)
|
||||||
->brandName('Krèios')
|
->brandName('Krèios')
|
||||||
->brandLogo(asset('images/kreios-logo.jpg'))
|
->brandLogo(asset('images/kreios-logo.jpg'))
|
||||||
->brandLogoHeight('2.5rem')
|
->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
|
public function run(): void
|
||||||
{
|
{
|
||||||
// Utente amministratore del backoffice.
|
// Utente amministratore del backoffice.
|
||||||
User::updateOrCreate(
|
User::firstOrCreate(
|
||||||
['email' => 'admin@kreiosinfissi.it'],
|
['email' => 'admin@kreiosinfissi.it'],
|
||||||
[
|
[
|
||||||
'name' => 'Amministratore',
|
'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]);
|
$this->call([CatalogoSeeder::class, ConfiguratoreSeeder::class, ProfiliExtraSeeder::class, NuoveOpzioniSeeder::class]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user