getUsersFilePath(); if (!file_exists($filePath)) { $dir = dirname($filePath); if (!is_dir($dir)) { mkdir($dir, 0755, true); } file_put_contents($filePath, json_encode([], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); } } /** * 获取账号数据文件路径 * @return string */ private function getUsersFilePath(): string { // 获取项目根目录 $rootPath = dirname(dirname(__DIR__)); $runtimePath = $rootPath . '/runtime'; if (!is_dir($runtimePath)) { mkdir($runtimePath, 0755, true); } return $runtimePath . '/' . self::USERS_FILE; } /** * 读取所有账号 * @return array */ public function getAllUsers(): array { $this->initUsersFile(); $filePath = $this->getUsersFilePath(); $content = file_get_contents($filePath); $users = json_decode($content, true); return is_array($users) ? $users : []; } /** * 保存账号数据 * @param array $users * @return bool */ private function saveUsers(array $users): bool { $this->initUsersFile(); $filePath = $this->getUsersFilePath(); return file_put_contents($filePath, json_encode($users, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)) !== false; } /** * 验证登录(包括管理员和普通用户) * @param string $username * @param string $password * @return array|false 返回用户信息或false */ public function verifyLogin(string $username, string $password) { // 验证管理员账号 if ($username === self::ADMIN_USERNAME && $password === self::ADMIN_PASSWORD) { return [ 'username' => $username, 'is_admin' => true, ]; } // 验证普通用户账号 $users = $this->getAllUsers(); foreach ($users as $user) { if (isset($user['username']) && $user['username'] === $username) { if (isset($user['password']) && $user['password'] === $password) { return [ 'username' => $username, 'is_admin' => false, ]; } } } return false; } /** * 添加账号 * @param string $username * @param string $password * @return array ['code' => 1|0, 'msg' => string] */ public function addUser(string $username, string $password): array { if (empty($username) || empty($password)) { return ['code' => 0, 'msg' => '用户名和密码不能为空']; } if ($username === self::ADMIN_USERNAME) { return ['code' => 0, 'msg' => '不能添加管理员账号']; } $users = $this->getAllUsers(); // 检查用户名是否已存在 foreach ($users as $user) { if (isset($user['username']) && $user['username'] === $username) { return ['code' => 0, 'msg' => '用户名已存在']; } } // 添加新用户 $users[] = [ 'username' => $username, 'password' => $password, 'created_at' => date('Y-m-d H:i:s'), ]; if ($this->saveUsers($users)) { return ['code' => 1, 'msg' => '添加成功']; } else { return ['code' => 0, 'msg' => '保存失败']; } } /** * 删除账号 * @param string $username * @return array ['code' => 1|0, 'msg' => string] */ public function deleteUser(string $username): array { if ($username === self::ADMIN_USERNAME) { return ['code' => 0, 'msg' => '不能删除管理员账号']; } $users = $this->getAllUsers(); $newUsers = []; foreach ($users as $user) { if (isset($user['username']) && $user['username'] !== $username) { $newUsers[] = $user; } } if (count($newUsers) === count($users)) { return ['code' => 0, 'msg' => '用户不存在']; } if ($this->saveUsers($newUsers)) { return ['code' => 1, 'msg' => '删除成功']; } else { return ['code' => 0, 'msg' => '保存失败']; } } /** * 检查是否为管理员 * @param string $username * @return bool */ public function isAdmin(string $username): bool { return $username === self::ADMIN_USERNAME; } }