Files
chat/backend/database/migrate_guest_management.php
T
2026-08-05 15:56:08 +08:00

84 lines
2.8 KiB
PHP

<?php
/**
* 访客管理权限迁移(可重复执行)。
* 用法: php database/migrate_guest_management.php
*/
require __DIR__ . '/../vendor/autoload.php';
$app = new think\App();
$app->initialize();
use app\service\PermissionCatalog;
use think\facade\Db;
function guestManagementTableExists(string $table): bool
{
$db = Db::getConfig('database') ?: env('DB_NAME', 'ai_chat');
$rows = Db::query(
'SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? LIMIT 1',
[$db, $table]
);
return !empty($rows);
}
try {
if (guestManagementTableExists('users')) {
Db::execute("UPDATE users SET last_login_at = created_at WHERE LEFT(username, 6) = 'guest_' AND last_login_at IS NULL");
}
if (guestManagementTableExists('sys_permissions')) {
$parent = Db::name('sys_permissions')->where('code', 'dir:org')->find();
if ($parent) {
$menu = Db::name('sys_permissions')->where('code', 'menu:guests')->find();
if (!$menu) {
$menuId = Db::name('sys_permissions')->insertGetId([
'type' => 'menu',
'code' => 'menu:guests',
'name' => '访客管理',
'parent_id' => (int) $parent['id'],
'path' => '/guests',
'icon' => 'visitors',
'sort_order' => 15,
'is_system' => 1,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$menu = ['id' => $menuId];
echo "Added menu:guests\n";
}
foreach ([
['btn:guest:status', '启用/禁用访客'],
['btn:guest:delete', '删除访客'],
] as [$code, $name]) {
if (!Db::name('sys_permissions')->where('code', $code)->find()) {
Db::name('sys_permissions')->insert([
'type' => 'btn',
'code' => $code,
'name' => $name,
'parent_id' => (int) $menu['id'],
'sort_order' => 0,
'is_system' => 1,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
echo "Added {$code}\n";
}
}
}
if (guestManagementTableExists('roles')) {
Db::name('roles')->where('slug', 'super_admin')->update([
'permissions' => json_encode(PermissionCatalog::fullPermissions(), JSON_UNESCAPED_UNICODE),
]);
}
}
echo "Guest management migration completed.\n";
} catch (\Throwable $e) {
echo 'Error: ' . $e->getMessage() . "\n";
exit(1);
}