125 行
4.4 KiB
PHP
125 行
4.4 KiB
PHP
<?php
|
||
/**
|
||
* 隐藏线下收银功能脚本
|
||
* 功能:从权限组中移除收银机权限(ID: 660),从而隐藏线下收银功能
|
||
* 使用方法:在浏览器中访问此文件或在命令行中执行
|
||
*/
|
||
|
||
// 引入ThinkPHP框架
|
||
require_once './index.php';
|
||
|
||
// 设置错误报告
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', 1);
|
||
|
||
// 日志记录函数
|
||
function logMessage($message) {
|
||
$logFile = './hide_cashier_log.txt';
|
||
$timestamp = date('Y-m-d H:i:s');
|
||
file_put_contents($logFile, "[{$timestamp}] {$message}\n", FILE_APPEND);
|
||
echo "[{$timestamp}] {$message}\n";
|
||
}
|
||
|
||
try {
|
||
logMessage("开始执行隐藏线下收银功能操作");
|
||
|
||
// 连接数据库
|
||
$db = M();
|
||
|
||
// 1. 使用ThinkPHP的Model方式操作数据库
|
||
$JurisdictionGroupModel = M('jurisdiction_group');
|
||
|
||
// 首先查询包含收银机权限的权限组
|
||
$groupsWithCashier = $JurisdictionGroupModel->where("jurisdiction_id LIKE '%660%'")->select();
|
||
|
||
if (empty($groupsWithCashier)) {
|
||
logMessage("没有找到包含收银机权限的权限组,可能已经被隐藏或不存在");
|
||
exit;
|
||
}
|
||
|
||
logMessage("找到 " . count($groupsWithCashier) . " 个包含收银机权限的权限组");
|
||
|
||
// 2. 创建备份表
|
||
$backupResult = M()->execute("CREATE TABLE IF NOT EXISTS ls_jurisdiction_group_backup_" . date('Ymd_His') . " AS SELECT * FROM ls_jurisdiction_group WHERE jurisdiction_id LIKE '%660%'");
|
||
|
||
if ($backupResult !== false) {
|
||
logMessage("权限组备份创建成功");
|
||
} else {
|
||
logMessage("警告:备份创建失败,但继续执行");
|
||
}
|
||
|
||
// 3. 开始事务
|
||
M()->startTrans();
|
||
|
||
$updatedCount = 0;
|
||
|
||
// 4. 逐个处理权限组
|
||
foreach ($groupsWithCashier as $group) {
|
||
$oldJurisdiction = $group['jurisdiction_id'];
|
||
$newJurisdiction = $oldJurisdiction;
|
||
|
||
// 移除660权限ID
|
||
$newJurisdiction = preg_replace('/^660,/', '', $newJurisdiction); // 开头
|
||
$newJurisdiction = preg_replace('/,660$/', '', $newJurisdiction); // 结尾
|
||
$newJurisdiction = preg_replace('/,660,/', ',', $newJurisdiction); // 中间
|
||
$newJurisdiction = preg_replace('/^660$/', '', $newJurisdiction); // 只有660
|
||
|
||
if ($newJurisdiction !== $oldJurisdiction) {
|
||
$updateResult = $JurisdictionGroupModel->where(array('id' => $group['id']))->save(array('jurisdiction_id' => $newJurisdiction));
|
||
|
||
if ($updateResult !== false) {
|
||
logMessage("权限组 '{$group['role_name']}' (ID: {$group['id']}) 更新成功");
|
||
logMessage(" 原权限: {$oldJurisdiction}");
|
||
logMessage(" 新权限: {$newJurisdiction}");
|
||
$updatedCount++;
|
||
} else {
|
||
throw new Exception("更新权限组 {$group['id']} 失败");
|
||
}
|
||
}
|
||
}
|
||
|
||
// 5. 提交事务
|
||
M()->commit();
|
||
|
||
logMessage("成功更新了 {$updatedCount} 个权限组");
|
||
|
||
// 6. 验证结果
|
||
$remainingGroups = $JurisdictionGroupModel->where("jurisdiction_id LIKE '%660%'")->select();
|
||
|
||
if (empty($remainingGroups)) {
|
||
logMessage("验证成功:所有权限组中的收银机权限已被移除");
|
||
logMessage("线下收银功能已成功隐藏");
|
||
} else {
|
||
logMessage("警告:仍有 " . count($remainingGroups) . " 个权限组包含收银机权限");
|
||
}
|
||
|
||
// 7. 记录操作日志到系统日志表(如果存在)
|
||
if ($db->query("SHOW TABLES LIKE 'action_log'")) {
|
||
$logData = [
|
||
'source' => 0,
|
||
'type' => 4,
|
||
'request_data' => json_encode(['action' => 'hide_offline_cashier', 'affected_groups' => $updatedCount]),
|
||
'desc' => '隐藏线下收银功能',
|
||
'add_time' => time()
|
||
];
|
||
$db->table('action_log')->add($logData);
|
||
}
|
||
|
||
} catch (Exception $e) {
|
||
// 回滚事务
|
||
M()->rollback();
|
||
|
||
logMessage("错误:" . $e->getMessage());
|
||
logMessage("操作已回滚");
|
||
exit(1);
|
||
}
|
||
|
||
logMessage("操作完成");
|
||
|
||
// 如果是通过浏览器访问,显示友好的结果页面
|
||
if (!empty($_SERVER['HTTP_HOST'])) {
|
||
echo "<h2>线下收银功能隐藏操作完成</h2>";
|
||
echo "<p>请查看日志文件 hide_cashier_log.txt 获取详细信息</p>";
|
||
echo "<p><a href='javascript:history.back()'>返回</a></p>";
|
||
}
|
||
?>
|