firstOrFail(); $tenant2 = Tenant::where('slug', 'global')->firstOrFail(); $users = [ [ 'tenant_id' => null, 'name' => 'Super Admin', 'email' => 'admin@projectra.ir', 'password' => Hash::make('password'), 'locale' => 'fa', 'preferred_calendar' => 'jalali', 'is_active' => true, 'email_verified_at' => now(), 'role' => 'super-admin', ], [ 'tenant_id' => $tenant1->id, 'name' => 'محمد احمدی', 'email' => 'admin@sepideh.ir', 'password' => Hash::make('password'), 'locale' => 'fa', 'preferred_calendar' => 'jalali', 'is_active' => true, 'email_verified_at' => now(), 'role' => 'admin', ], [ 'tenant_id' => $tenant1->id, 'name' => 'علی رضایی', 'email' => 'manager@sepideh.ir', 'password' => Hash::make('password'), 'locale' => 'fa', 'preferred_calendar' => 'jalali', 'is_active' => true, 'email_verified_at' => now(), 'role' => 'project-manager', ], [ 'tenant_id' => $tenant2->id, 'name' => 'John Smith', 'email' => 'admin@global.com', 'password' => Hash::make('password'), 'locale' => 'en', 'preferred_calendar' => 'gregorian', 'is_active' => true, 'email_verified_at' => now(), 'role' => 'admin', ], ]; foreach ($users as $userData) { $roleName = $userData['role']; unset($userData['role']); $user = User::create($userData); // Assign the Spatie role. For tenant-scoped users, scope the role // to their tenant; for super-admin, use the global (null tenant) role. if ($user->tenant_id) { $role = Role::where('name', $roleName) ->where('tenant_id', $user->tenant_id) ->first(); } else { $role = Role::where('name', $roleName) ->whereNull('tenant_id') ->first(); } if ($role) { $user->assignRole($role); } else { $this->command->warn("Role '{$roleName}' not found for user {$user->email}. Skipping role assignment."); } } $this->command->info('Users seeded: ' . count($users) . ' records created with roles.'); } }