Files
dafuweng-saiadmin6.x/server/db/run_sa_system_role_dept_id.php
2026-05-26 09:43:42 +08:00

75 lines
2.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 执行 sa_system_role 渠道隔离迁移,并为已有渠道复制默认角色、映射用户角色
*
* 用法(在 server 目录): php db/run_sa_system_role_dept_id.php
*/
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../support/bootstrap.php';
use plugin\saiadmin\app\service\SystemRoleChannelService;
use support\think\Db;
function tableHasColumn(string $table, string $column): bool
{
try {
$fields = Db::getFields($table);
return isset($fields[$column]);
} catch (\Throwable $e) {
return false;
}
}
function indexExists(string $table, string $indexName): bool
{
$rows = Db::query("SHOW INDEX FROM `{$table}` WHERE Key_name = ?", [$indexName]);
return !empty($rows);
}
echo "=== sa_system_role dept_id migration ===\n";
if (!tableHasColumn('sa_system_role', 'dept_id')) {
Db::execute(
"ALTER TABLE `sa_system_role`
ADD COLUMN `dept_id` bigint(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属渠道ID0=默认模板' AFTER `id`"
);
echo "OK: ADD COLUMN dept_id\n";
} else {
echo "SKIP: dept_id column exists\n";
}
if (!indexExists('sa_system_role', 'idx_dept_id')) {
Db::execute('ALTER TABLE `sa_system_role` ADD INDEX `idx_dept_id` (`dept_id`)');
echo "OK: ADD INDEX idx_dept_id\n";
} else {
echo "SKIP: idx_dept_id exists\n";
}
Db::execute('UPDATE `sa_system_role` SET `dept_id` = 0 WHERE `id` > 1');
echo "OK: UPDATE template dept_id\n";
if (indexExists('sa_system_role', 'uk_slug')) {
Db::execute('ALTER TABLE `sa_system_role` DROP INDEX `uk_slug`');
echo "OK: DROP INDEX uk_slug\n";
} else {
echo "SKIP: uk_slug not found\n";
}
if (!indexExists('sa_system_role', 'uk_dept_code')) {
Db::execute('ALTER TABLE `sa_system_role` ADD UNIQUE KEY `uk_dept_code` (`dept_id`, `code`)');
echo "OK: ADD UNIQUE uk_dept_code\n";
} else {
echo "SKIP: uk_dept_code exists\n";
}
$service = new SystemRoleChannelService();
$sync = $service->syncAllChannelsFromDefault();
echo "Synced roles for channels: " . json_encode($sync, JSON_UNESCAPED_UNICODE) . "\n";
$mapped = $service->remapUserRolesToChannelRoles();
echo "Remapped user roles: {$mapped}\n";
echo "Done.\n";