exec(" CREATE TABLE IF NOT EXISTS permissions ( id INT AUTO_INCREMENT PRIMARY KEY, slug VARCHAR(100) NOT NULL UNIQUE, name VARCHAR(100) NOT NULL, description TEXT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "); // 2. Create user_permissions table $pdo->exec(" CREATE TABLE IF NOT EXISTS user_permissions ( user_id INT NOT NULL, permission_id INT NOT NULL, PRIMARY KEY (user_id, permission_id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "); // 3. Seed default permissions $permissions = [ ['slug' => 'manage_platform_users', 'name' => 'Manage Platform Users', 'description' => 'Create and manage admin users and their permissions.'], ['slug' => 'manage_shippers', 'name' => 'Manage Shippers', 'description' => 'View, approve, and edit shipper accounts.'], ['slug' => 'manage_truck_owners', 'name' => 'Manage Truck Owners', 'description' => 'View, approve, and edit truck owner accounts.'], ['slug' => 'manage_shipments', 'name' => 'Manage Shipments', 'description' => 'View and edit shipments.'], ['slug' => 'manage_content', 'name' => 'Manage Content', 'description' => 'Edit FAQs, Landing Pages, and other content.'], ['slug' => 'manage_settings', 'name' => 'Manage Settings', 'description' => 'Edit global application settings.'], ['slug' => 'view_reports', 'name' => 'View Reports', 'description' => 'Access dashboard reports and statistics.'] ]; $stmtInsert = $pdo->prepare("INSERT IGNORE INTO permissions (slug, name, description) VALUES (:slug, :name, :description)"); foreach ($permissions as $perm) { $stmtInsert->execute($perm); } // 4. Assign all permissions to existing admins // First, get all permission IDs $stmtPerms = $pdo->query("SELECT id FROM permissions"); $allPermIds = $stmtPerms->fetchAll(PDO::FETCH_COLUMN); // Get all admin users $stmtAdmins = $pdo->query("SELECT id FROM users WHERE role = 'admin'"); $adminIds = $stmtAdmins->fetchAll(PDO::FETCH_COLUMN); $stmtAssign = $pdo->prepare("INSERT IGNORE INTO user_permissions (user_id, permission_id) VALUES (:uid, :pid)"); foreach ($adminIds as $uid) { foreach ($allPermIds as $pid) { $stmtAssign->execute(['uid' => $uid, 'pid' => $pid]); } } echo "Permissions tables created and seeded successfully."; } catch (PDOException $e) { echo "Error: " . $e->getMessage(); }