b2in/database/seeders/RoleSeeder.php
2026-02-20 17:57:50 +01:00

185 lines
6.2 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Reset cached roles and permissions
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
// --- Definiere Permissions ---
$permissions = [
// Hub Management
'view hubs',
'create hubs',
'edit hubs',
'delete hubs',
// Partner Management
'view partners',
'create partners',
'edit partners',
'delete partners',
'manage provisions', // Provisions-Regeln verwalten
// Product Management
'view products',
'create products',
'edit products',
'delete products',
'curate products', // Produkte freigeben/ablehnen (Admin)
'manage rental options', // Miet-Parameter verwalten
// Order Management (für später)
'view orders',
'manage orders',
// User & Role Management
'view users',
'manage users',
'manage roles',
// Frontend/Customer facing
'access dashboard', // Genereller Backend-Zugriff
'place orders', // Für Kunden
];
// Erstelle Permissions
foreach ($permissions as $permission) {
Permission::create(['name' => $permission]);
}
// --- Definiere Rollen und weise Permissions zu ---
// 1. Customer (Endkunde)
$customerRole = Role::create([
'name' => 'Customer',
'display_name' => 'Customer (Kunde)',
'icon' => 'user',
'color' => 'indigo',
'can_be_invited' => true,
'reg_prefix' => 'K',
'reg_description' => 'Kundencodes werden Maklern oder Händlern zugeordnet',
'reg_start_number' => 10000000,
]);
$customerRole->givePermissionTo([
'view products',
'place orders',
'view orders', // Eigene Bestellungen sehen
]);
// 2. Estate-Agent (Makler)
$estateAgentRole = Role::create([
'name' => 'Estate-Agent',
'display_name' => 'Estate-Agent (Makler)',
'icon' => 'home',
'color' => 'lime',
'can_be_invited' => true,
'reg_prefix' => 'M',
'reg_description' => 'Maklercodes für die Registrierung von Maklern',
'reg_start_number' => 10000000,
]);
$estateAgentRole->givePermissionTo([
'access dashboard',
'view partners', // Damit sie sehen können, wen sie empfehlen
'view hubs',
// Makler bekommen KEINE Produkt- oder Order-Rechte
]);
// 3. Retailer (Lokaler Händler)
$retailerRole = Role::create([
'name' => 'Retailer',
'display_name' => 'Retailer (Händler)',
'icon' => 'building-storefront',
'color' => 'teal',
'can_be_invited' => true,
'reg_prefix' => 'H',
'reg_description' => 'Händlercodes für die Registrierung von Händlern',
'reg_start_number' => 10000000,
]);
$retailerRole->givePermissionTo([
'access dashboard',
'view products',
'create products',
'edit products', // Später eingeschränkt auf EIGENE Produkte
'delete products', // Später eingeschränkt auf EIGENE Produkte
'manage rental options',
'view orders', // Eigene Bestellungen
'manage orders', // Eigene Bestellungen
]);
// 4. Manufacturer (Hersteller)
$manufacturerRole = Role::create([
'name' => 'Manufacturer',
'display_name' => 'Manufacturer (Hersteller)',
'icon' => 'wrench-screwdriver',
'color' => 'orange',
'can_be_invited' => true,
'reg_prefix' => 'P',
'reg_description' => 'Herstellercodes für die Registrierung von Herstellern',
'reg_start_number' => 10000000,
]);
$manufacturerRole->givePermissionTo([
'access dashboard',
'view products',
'create products',
'edit products', // Später eingeschränkt auf EIGENE Produkte
'delete products', // Später eingeschränkt auf EIGENE Produkte
'manage rental options',
'view orders', // Eigene Bestellungen
'manage orders', // Eigene Bestellungen
]);
// 5. Admin (B2In Management / Marcel)
$adminRole = Role::create([
'name' => 'Admin',
'display_name' => 'Admin (Administrator)',
'icon' => 'user-circle',
'color' => 'purple',
'can_be_invited' => false, // Admins werden NICHT eingeladen
]);
$adminRole->givePermissionTo([
'access dashboard',
'view hubs',
'create hubs',
'edit hubs',
'delete hubs',
'view partners',
'create partners',
'edit partners',
'delete partners',
'manage provisions',
'view products',
'create products',
'edit products',
'delete products',
'curate products',
'manage rental options',
'view orders',
'manage orders',
'view users',
'manage users',
'manage roles',
]);
// 6. Super-Admin (Entwickler)
// Super-Admins bekommen automatisch ALLE Rechte.
// Das Paket erkennt die Rolle 'Super-Admin', wenn wir ein Gate definieren.
$superAdminRole = Role::create([
'name' => 'Super-Admin',
'display_name' => 'Super-Admin (Entwickler)',
'icon' => 'shield-check',
'color' => 'red',
'can_be_invited' => false, // Super-Admins werden NICHT eingeladen
]);
}
}