'super-admin']); $admin = Role::firstOrCreate(['name' => 'admin']); $operator = Role::firstOrCreate(['name' => 'operator']); $viewer = Role::firstOrCreate(['name' => 'viewer']); // Create permissions $permissions = [ // Hypervisors 'hypervisors.view', 'hypervisors.create', 'hypervisors.edit', 'hypervisors.delete', 'vms.view', 'vms.power', 'vms.create', 'vms.delete', 'templates.view', 'templates.create', 'templates.edit', 'templates.delete', 'templates.deploy', // Containers 'containers.view', 'containers.manage', 'stacks.view', 'stacks.create', 'stacks.edit', 'stacks.delete', // Cloud 'cloud.view', 'cloud.create', 'cloud.edit', 'cloud.delete', // Security 'security.view', 'security.scan', // Backups 'backups.view', 'backups.create', 'backups.restore', 'backups.delete', // Monitoring 'monitoring.view', 'monitoring.alerts', // Identity 'identity.view', 'identity.create', 'identity.edit', 'identity.delete', // Wiki 'wiki.view', 'wiki.create', 'wiki.edit', 'wiki.delete', // ACL 'acl.view', 'acl.manage', // Admin 'admin.view', 'admin.manage', ]; foreach ($permissions as $permission) { Permission::firstOrCreate(['name' => $permission]); } // Assign permissions to roles $admin->syncPermissions(Permission::whereNotIn('name', ['admin.manage', 'acl.manage'])->get()); $operator->syncPermissions([ 'hypervisors.view', 'vms.view', 'vms.power', 'containers.view', 'containers.manage', 'stacks.view', 'cloud.view', 'security.view', 'backups.view', 'monitoring.view', 'monitoring.alerts', 'identity.view', 'wiki.view', 'wiki.create', 'wiki.edit', ]); $viewer->syncPermissions([ 'hypervisors.view', 'vms.view', 'containers.view', 'stacks.view', 'cloud.view', 'security.view', 'backups.view', 'monitoring.view', 'identity.view', 'wiki.view', ]); // Create default super admin user $user = User::firstOrCreate( ['email' => 'admin@infra.local'], [ 'name' => 'Super Admin', 'password' => Hash::make('Admin@123456'), 'is_active' => true, ] ); $user->assignRole('super-admin'); // Default settings \App\Models\Setting::firstOrCreate(['key' => 'app.name'], [ 'group' => 'general', 'value' => 'Infra Manager', 'type' => 'string', ]); \App\Models\Setting::firstOrCreate(['key' => 'app.theme'], [ 'group' => 'general', 'value' => 'dark', 'type' => 'string', ]); \App\Models\Setting::firstOrCreate(['key' => 'security.session_timeout'], [ 'group' => 'security', 'value' => '480', 'type' => 'integer', ]); } }