$name) { $role = Role::findOrCreate($name, 'web'); $role->update(['priority' => $priorities[$index]]); $roles[] = $role; } // 2. Create 5 users and assign them role combinations $users = User::factory()->count(5)->create(); // Assign combinations $users[0]->assignRole(['Manager', 'Editor']); $users[1]->assignRole(['Developer', 'Support']); $users[2]->assignRole(['Auditor']); $users[3]->assignRole(['Manager', 'Developer']); $users[4]->assignRole(['Support']); // 3. Create 10 apps using ConnectedAppService to automatically register permissions $apps = []; $factory = ConnectedApp::factory(); for ($i = 0; $i < 10; $i++) { $data = $factory->definition(); $request = new ConnectAppRequest( name: $data['name'], connectionProviderId: $data['connection_provider_id'], connectionProtocolId: $data['connection_protocol_id'], slug: $data['slug'], connectionStatusId: $data['connection_status_id'], ); $this->connectedAppService->create($request); $apps[] = ConnectedApp::where('slug', $data['slug'])->firstOrFail(); } // 4. Connect apps to roles using AppRoleService to automatically assign permissions $roleAppsMapping = [ 'Manager' => [$apps[0]->id, $apps[1]->id, $apps[2]->id], 'Editor' => [$apps[2]->id, $apps[3]->id, $apps[4]->id], 'Auditor' => [$apps[5]->id], 'Developer' => [$apps[6]->id, $apps[7]->id, $apps[8]->id], 'Support' => [$apps[8]->id, $apps[9]->id], ]; foreach ($roleAppsMapping as $roleName => $appIds) { $role = Role::findByName($roleName, 'web'); $this->appRoleService->assign(new AssignAppsToRoleData( roleId: $role->id, validUpto: now()->addYears(5)->toDateTimeString(), appIds: $appIds )); } } }