feat: introduce multi-tenancy by adding a structures table, structure_id to key models, and updating seeders for structure management.
This commit is contained in:
@@ -13,18 +13,49 @@ class DatabaseSeeder extends Seeder
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// 1. Initialiser la structure par défaut (CABM)
|
||||
$cabm = \App\Models\Structure::firstOrCreate([
|
||||
'slug' => 'cabm'
|
||||
], [
|
||||
'name' => 'CABM',
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
// 2. Définir le contexte global pour les seeders suivants
|
||||
config(['tenant.structure_id' => $cabm->id]);
|
||||
app()[\Spatie\Permission\PermissionRegistrar::class]->setPermissionsTeamId($cabm->id);
|
||||
|
||||
// 3. Appeler les seeders de base (ils utiliseront le contexte CABM)
|
||||
$this->call([
|
||||
ServiceSeeder::class,
|
||||
RolesAndPermissionsSeeder::class,
|
||||
IntegrationTemplateSeeder::class,
|
||||
]);
|
||||
|
||||
$admin = User::factory()->create([
|
||||
'name' => 'Admin User',
|
||||
'email' => 'admin@admin.com',
|
||||
'password' => bcrypt('password'),
|
||||
]);
|
||||
// 4. Créer le compte Admin lié à cette structure
|
||||
$admin = User::withoutGlobalScope('structure')->updateOrCreate(
|
||||
['email' => 'admin@admin.com'],
|
||||
[
|
||||
'name' => 'Admin User',
|
||||
'password' => bcrypt('password'),
|
||||
'structure_id' => $cabm->id,
|
||||
]
|
||||
);
|
||||
|
||||
$admin->assignRole('Admin');
|
||||
// 5. Lui assigner le rôle Admin (dans le contexte de CABM)
|
||||
if (!$admin->hasRole('Admin')) {
|
||||
$admin->assignRole('Admin');
|
||||
}
|
||||
|
||||
// 6. Créer le rôle SuperAdmin lié à CABM pour le seeder
|
||||
$superAdminRole = \App\Models\Role::updateOrCreate(
|
||||
['name' => 'SuperAdmin'],
|
||||
['guard_name' => 'web', 'structure_id' => $cabm->id]
|
||||
);
|
||||
|
||||
// L'admin de base sera aussi SuperAdmin
|
||||
if (!$admin->hasRole('SuperAdmin')) {
|
||||
$admin->assignRole('SuperAdmin');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user