gengx
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
<?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);
|
||||
}
|
||||
Reference in New Issue
Block a user