From c6ca3258c10dc458dd02e7aaf0017990170a1b85 Mon Sep 17 00:00:00 2001 From: F4ilji Date: Sat, 11 Jul 2026 14:17:11 +0500 Subject: [PATCH] feat(permissions): add dashboard:sync-permissions artisan command Auto-discovers all dashboard permissions from resource/prefix matrix, creates missing ones in DB, syncs to super_admin and admin roles. Run on production after deploy or when adding new menu sections. --- .../Commands/SyncDashboardPermissions.php | 65 +++++++++++++++++++ app/Ship/Kernels/ConsoleKernel.php | 2 + 2 files changed, 67 insertions(+) create mode 100644 app/Ship/Commands/SyncDashboardPermissions.php diff --git a/app/Ship/Commands/SyncDashboardPermissions.php b/app/Ship/Commands/SyncDashboardPermissions.php new file mode 100644 index 0000000..0bcdfa0 --- /dev/null +++ b/app/Ship/Commands/SyncDashboardPermissions.php @@ -0,0 +1,65 @@ + $name, 'guard_name' => 'web'], + ); + + $created++; + } + } + + // Also create view_any_contact_widget (with underscore) if menuConfig uses it + Permission::firstOrCreate( + ['name' => 'view_any_contact_widget', 'guard_name' => 'web'], + ); + + $roleNames = explode(',', $this->option('role')); + $allPerms = Permission::where('guard_name', 'web')->get(); + + foreach ($roleNames as $roleName) { + $roleName = trim($roleName); + $role = Role::firstOrCreate( + ['name' => $roleName, 'guard_name' => 'web'], + ); + $role->syncPermissions($allPerms); + $this->info("Role [{$roleName}] synced with {$allPerms->count()} permissions"); + } + + $this->info("Done. Total permissions: {$allPerms->count()}"); + + return static::SUCCESS; + } +} diff --git a/app/Ship/Kernels/ConsoleKernel.php b/app/Ship/Kernels/ConsoleKernel.php index b091dd0..e87f2a2 100755 --- a/app/Ship/Kernels/ConsoleKernel.php +++ b/app/Ship/Kernels/ConsoleKernel.php @@ -6,6 +6,7 @@ use AlxDorosenco\PortoForLaravel\Loaders\CommandsLoader; use AlxDorosenco\PortoForLaravel\Loaders\RoutesLoader; use App\Containers\Dashboard\Commands\FetchEmailNewsCommand; use App\Ship\Commands\InitRoles; +use App\Ship\Commands\SyncDashboardPermissions; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as LaravelConsoleKernel; @@ -34,6 +35,7 @@ class ConsoleKernel extends LaravelConsoleKernel protected $commands = [ InitRoles::class, FetchEmailNewsCommand::class, + SyncDashboardPermissions::class, ]; /**