104 lines
3.8 KiB
PHP
104 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\Tenant;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
class UserSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Run the database seeds.
|
|
*
|
|
* Creates sample users across tenants and assigns Spatie roles.
|
|
*
|
|
* Users:
|
|
* 1. Super Admin — platform-wide, no tenant
|
|
* 2. Admin — tenant 1 (Sepideh)
|
|
* 3. Project Mgr — tenant 1 (Sepideh)
|
|
* 4. Admin — tenant 2 (Global)
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$tenant1 = Tenant::where('slug', 'sepideh')->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.');
|
|
}
|
|
}
|