84 lines
2.8 KiB
PHP
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);
|
|
}
|