From ca212233a3d12f19876b7773fdff1235a701c962 Mon Sep 17 00:00:00 2001 From: ypsdf1 Date: Sun, 28 Jun 2026 00:16:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E7=BB=84PHP=E2=86=92?= =?UTF-8?q?Java=E5=8F=98=E6=9B=B4=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - handleUpdateUserGroup: 更新后写入web_admin_changes(group_change) - handleDeleteUserGroup: 删除后写入web_admin_changes(group_change) - Java端pollAdminChanges收到group_change后自动重载用户组配置 --- api/land_api.php | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/api/land_api.php b/api/land_api.php index 23203e7..1e17b40 100644 --- a/api/land_api.php +++ b/api/land_api.php @@ -1512,6 +1512,28 @@ function handleUpdateUserGroup($db, $data) { $stmt->bindValue(':perms', $defaultPerms, SQLITE3_TEXT); $stmt->bindValue(':synced', time(), SQLITE3_INTEGER); $stmt->execute(); + + // ★ 写入变更队列,通知Java端重新加载用户组 + try { + $db->exec("CREATE TABLE IF NOT EXISTS web_admin_changes ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + change_type TEXT NOT NULL, + target_id TEXT DEFAULT '', + target_name TEXT DEFAULT '', + change_data TEXT DEFAULT '{}', + created_at INTEGER DEFAULT 0, + acknowledged INTEGER DEFAULT 0, + acked_at INTEGER DEFAULT 0 + )"); + $stmt2 = $db->prepare("INSERT INTO web_admin_changes (change_type, target_id, target_name, change_data, created_at) + VALUES ('group_change', :id, :name, :data, :time)"); + $stmt2->bindValue(':id', $name, SQLITE3_TEXT); + $stmt2->bindValue(':name', $name, SQLITE3_TEXT); + $stmt2->bindValue(':data', json_encode(['action' => 'update', 'group_name' => $name]), SQLITE3_TEXT); + $stmt2->bindValue(':time', time(), SQLITE3_INTEGER); + $stmt2->execute(); + } catch (\Throwable $e) { /* 静默 */ } + echo json_encode(['success' => true, 'message' => "用户组 {$name} 已更新"]); } @@ -1520,6 +1542,28 @@ function handleDeleteUserGroup($db, $name) { $stmt = $db->prepare("DELETE FROM web_user_groups WHERE group_name = :name"); $stmt->bindValue(':name', $name, SQLITE3_TEXT); $stmt->execute(); + + // ★ 写入变更队列,通知Java端重新加载用户组 + try { + $db->exec("CREATE TABLE IF NOT EXISTS web_admin_changes ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + change_type TEXT NOT NULL, + target_id TEXT DEFAULT '', + target_name TEXT DEFAULT '', + change_data TEXT DEFAULT '{}', + created_at INTEGER DEFAULT 0, + acknowledged INTEGER DEFAULT 0, + acked_at INTEGER DEFAULT 0 + )"); + $stmt2 = $db->prepare("INSERT INTO web_admin_changes (change_type, target_id, target_name, change_data, created_at) + VALUES ('group_change', :id, :name, :data, :time)"); + $stmt2->bindValue(':id', $name, SQLITE3_TEXT); + $stmt2->bindValue(':name', $name, SQLITE3_TEXT); + $stmt2->bindValue(':data', json_encode(['action' => 'delete', 'group_name' => $name]), SQLITE3_TEXT); + $stmt2->bindValue(':time', time(), SQLITE3_INTEGER); + $stmt2->execute(); + } catch (\Throwable $e) { /* 静默 */ } + echo json_encode(['success' => true, 'message' => "用户组 {$name} 已删除"]); }