sartUP - Riepilogo Sviluppo
sartUP - Riepilogo Sviluppo
π Panoramica Progetto
Nome: sartUP Framework: Laravel 11 PHP: 8.2+ Database: MySQL/MariaDB (capera_sartupDB) Autenticazione: Native Laravel Auth RBAC: Spatie/laravel-permission Frontend: Tailwind CSS (via CDN)
---
π― Obiettivi Completati
1. Setup Iniziale
- β Installazione Laravel 11 su cPanel VPS
- β Configurazione PHP 8.2, Composer 2.7+, Node 20+
- β Database MySQL configurato (utente: capera_sartup, db: capera_sartupDB)
- β Rimozione completa SQLite, migrazione a MySQL/MariaDB
- β Login/Logout nativo Laravel
- β Password reset
- β Selezione ruolo attivo al login
- β
Middleware
EnsureActiveRoleper gestione ruolo attivo in sessione super-admin(bypass completo gates, accesso a tutto)adminoperatormaintenanceviewer- Email:
root@sartup.local - Password:
ChangeMe! - Ruoli: super-admin, admin
menus- Contenitori menumenu_items- Voci di menu con supporto gerarchia (parent_id)- 4 livelli di profonditΓ (L1: topbar, L2/L3/L4: sidebar)
- Filtri per ruoli (
required_rolesJSON) - Filtri per permessi (
required_permissionsJSON) - Ordinamento personalizzabile (
order_index) - Icone, route, URL custom
MenuService- Costruisce albero menu filtrato per utente- Topbar: - Logo sartUP - Menu L1 (Dashboard, Industria 4.0, Menu [solo super-admin]) - Badge ruolo attivo - Dropdown utente (Cambia ruolo, Logout)
- Sidebar (collassabile): - Menu L2/L3/L4 organizzati gerarchicamente - Stato collassato persistente in
- Main Content: - Breadcrumb dinamico - Titolo modulo - Alert successo (toast-like) - Area contenuto
- Caricato via CDN
- Responsive design
- Classi utility per layout moderno
- Registrato middleware
- Elementi
- Stato persistente in
- Icone chevron ruotabili (CSS
- Match esatto route:
- Classi:
- Tabella con icone, badge, hover effects
- CRUD completo (create, edit, delete)
- Ordinamento gerarchico
- Colonna "URL" nascosta per UX pulita
- Tailwind CSS 3.x (CDN)
- Super-admin bypassa tutti i gate tramite
- Ruolo attivo gestito in sessione, non in DB
- Menu supporta JSON per
- Sidebar usa
- Route naming: pattern
- URL Produzione: https://sartup.it/sartup/public
- Login: https://sartup.it/sartup/public/login
- Dashboard: https://sartup.it/sartup/public/admin/dashboard
- Menu Management: https://sartup.it/sartup/public/admin/systems/menu
2. Sistema di Autenticazione
3. Sistema RBAC con Spatie
Ruoli implementati:Utente di test:
4. Menu Dinamico Multi-livello
Tabelle Database:
Caratteristiche:
Service Layer:
5. UI/UX Admin Area
Layout (resources/views/layouts/admin.blade.php):
sessionStorage
- Evidenziazione voce attiva (match esatto route)
- Icone chevron per submenu
Tailwind CSS:
---
ποΈ Struttura File Progetto
Routes
``
routes/
βββ auth.php # Login, logout, reset password, selezione ruolo
βββ admin.php # Area admin (dashboard, i40, menu management)
`Controllers
`
app/Http/Controllers/
βββ Auth/
β βββ LoginController.php
β βββ RoleSelectorController.php
βββ Admin/
β βββ Dashboard/DashboardController.php
β βββ I40/Machines/MachinesController.php
β βββ Systems/Menu/MenuController.php (CRUD menu, reorder)
`Models
`
app/Models/
βββ User.php # HasRoles trait
βββ Menu.php
βββ MenuItem.php
`Services
`
app/Services/
βββ MenuService.php # Logica albero menu
`Middleware
`
app/Http/Middleware/
βββ EnsureActiveRole.php
`Views
`
resources/views/
βββ layouts/
β βββ auth.blade.php # Layout login (1/3 - 2/3)
β βββ admin.blade.php # Layout admin area
βββ auth/
β βββ login.blade.php
β βββ select-role.blade.php
βββ admin/
βββ dashboard/index.blade.php
βββ i40/machines/connected.blade.php
βββ systems/menu/
βββ index.blade.php # Gestione menu
βββ create.blade.php
βββ edit.blade.php
`Database
`
database/
βββ migrations/
β βββ 2025_10_16_152934_create_menus_table.php
β βββ 2025_10_16_152940_create_menu_items_table.php
βββ seeders/
βββ RolesSeeder.php
βββ SuperAdminSeeder.php
βββ MenuSeeder.php
`---
π§ Configurazione
.env (chiavi importanti)
`env
APP_URL=https://sartup.it/sartup/public
SESSION_PATH=/sartup/publicDB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=capera_sartupDB
DB_USERNAME=capera_sartup
DB_PASSWORD=EpuggA2025-!
`Service Provider
app/Providers/AppServiceProvider.php:
- Gate::before() per super-admin bypass
bootstrap/app.php
EnsureActiveRole---
π Problemi Risolti
1. Composer Installation
Errore: allow_url_fopen = Off, ext-fileinfo mancante
Fix: Abilitato allow_url_fopen in php.ini, usato --ignore-platform-req=ext-fileinfo2. Login 500 Error
Causa: auth()->user()->hasRole() su utente null
Fix: Usato direttiva Blade @role() di Spatie3.
in_array() Argument #2 Error
Causa: required_roles in DB era doppio-encoded JSON
Fix: Corretto JSON in DB, aggiornato MenuSeeder per usare casting Eloquent4. Redirect Loop Login
Causa: route_name NULL per "Industria 4.0", APP_URL e SESSION_PATH errati
Fix: Aggiornato DB con route corretta, corretto .env5. Dropdown Utente non Cliccabile
UX: Area cliccabile troppo piccola
Fix: Aumentato padding, migliorato stile <details>6. Menu "Servizio" Visibile Sempre
Causa: Check @role('super-admin') invece di session('active_role')
Fix: Controllo esplicito su session('active_role') === 'super-admin'7. MenuController::middleware() Undefined
Causa: Controller base troppo minimale
Fix: Ripristinato AuthorizesRequests e ValidatesRequests traits8. Drag&Drop Reorder 500
Causa: Metodo reorder() mancante
Fix: Implementato con transazione DB e helper ricorsivo applyOrder()9. Sidebar
data-node Array Error
Causa: Sintassi errata {{ ['id'] }} invece di {{ $l2['id'] }}
Fix: Corretto attributi data-node10.
htmlspecialchars() Array Given
Causa: Placeholder {{ ['label'] }} residui dopo sed
Fix: Sostituiti con {{ $l3['label'] }}, {{ $l4['label'] }}11. Syntax Error "unexpected token ="
Causa: Blocco @php corrotto con variabili senza nome
Fix: Ripristinato header completo con tutte le variabili12. UIkit Migration Rollback
Richiesta: Tornare a Tailwind dopo test UIkit
Fix: Ripristinata versione precedente Tailwind funzionante---
π¨ Features UI
Sidebar Collassabile
<details> per L2/L3
sessionStorage (scope: path-based)
group-open:rotate-180)Evidenziazione Voce Attiva
request()->routeIs($routeName)
text-blue-600 font-medium bg-blue-50Menu Management (Solo Super-Admin)
---
π¦ Dipendenze Principali
`json
{
"require": {
"php": "^8.2",
"laravel/framework": "^11.0",
"spatie/laravel-permission": "^6.0"
}
}
`Frontend:
---
π Prossimi Step Suggeriti
1. Industria 4.0 - Macchine Collegate:
- Implementare controller/model per gestione macchine
- CRUD completo
- Dashboard con statistiche real-time
2. Placeholder Views:
-
admin/dashboard/index.blade.php β Dashboard con widget
- admin/i40/machines/connected.blade.php β Lista macchine3. Permessi Granulari:
- Definire permissions specifiche (es.
machines.view, machines.edit)
- Assegnare a ruoli4. Form Validation:
- Request classes per CRUD menu
- Validazione lato server
5. Testing:
- Feature tests per auth flow
- Unit tests per MenuService
6. Performance:
- Cache menu tree
- Eager loading relazioni
7. Security Hardening:
- Rate limiting login
- CSRF token refresh
- Input sanitization
---
π Note Importanti
Gate::before()
required_roles e required_permissions
sessionStorage per persistenza stato (non cookie)
admin.area.resource.action---
π Link Utili
---
π€ Credenziali Test
`
Email: root@sartup.local
Password: ChangeMe!
Ruoli: super-admin, admin
``
---
Documento generato: 16 Ottobre 2025 Versione Laravel: 11.46.1 PHP: 8.2.29
Analisi Codice
Blocco 1
routes/
βββ auth.php # Login, logout, reset password, selezione ruolo
βββ admin.php # Area admin (dashboard, i40, menu management)
Blocco 2
app/Http/Controllers/
βββ Auth/
β βββ LoginController.php
β βββ RoleSelectorController.php
βββ Admin/
β βββ Dashboard/DashboardController.php
β βββ I40/Machines/MachinesController.php
β βββ Systems/Menu/MenuController.php (CRUD menu, reorder)
Blocco 3
app/Models/
βββ User.php # HasRoles trait
βββ Menu.php
βββ MenuItem.php
Blocco 4
app/Services/
βββ MenuService.php # Logica albero menu
Blocco 5
app/Http/Middleware/
βββ EnsureActiveRole.php
Blocco 6
resources/views/
βββ layouts/
β βββ auth.blade.php # Layout login (1/3 - 2/3)
β βββ admin.blade.php # Layout admin area
βββ auth/
β βββ login.blade.php
β βββ select-role.blade.php
βββ admin/
βββ dashboard/index.blade.php
βββ i40/machines/connected.blade.php
βββ systems/menu/
βββ index.blade.php # Gestione menu
βββ create.blade.php
βββ edit.blade.php
Blocco 7
database/
βββ migrations/
β βββ 2025_10_16_152934_create_menus_table.php
β βββ 2025_10_16_152940_create_menu_items_table.php
βββ seeders/
βββ RolesSeeder.php
βββ SuperAdminSeeder.php
βββ MenuSeeder.php
Blocco 8 env
APP_URL=https://sartup.it/sartup/public
SESSION_PATH=/sartup/public
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=capera_sartupDB
DB_USERNAME=capera_sartup
DB_PASSWORD=EpuggA2025-!
Blocco 9 json
{
"require": {
"php": "^8.2",
"laravel/framework": "^11.0",
"spatie/laravel-permission": "^6.0"
}
}
Blocco 10
Email: root@sartup.local
Password: ChangeMe!
Ruoli: super-admin, admin