后台新增获取游戏连接按钮

This commit is contained in:
2026-04-28 11:06:56 +08:00
parent a7b2f2cd91
commit 63db23df2d
7 changed files with 134 additions and 4 deletions

View File

@@ -16,6 +16,7 @@ use plugin\saiadmin\service\Permission;
use support\Request;
use support\Response;
use app\api\cache\UserCache;
use Tinywan\Jwt\JwtToken;
use app\dice\model\player\DicePlayer;
/**
@@ -210,6 +211,63 @@ class DicePlayerController extends BaseController
return $this->success('update success');
}
/**
* 获取游戏链接
* @param Request $request
* @return Response
*/
#[Permission('获取游戏链接', 'dice:player:index:getGameUrl')]
public function getGameUrl(Request $request): Response
{
$id = $request->input('id');
if ($id === null || $id === '') {
return $this->fail('missing parameter id');
}
$player = $this->logic->read($id);
if (!$player) {
return $this->fail('not found');
}
$allowedIds = AdminScopeHelper::getAllowedAdminIds($this->adminInfo ?? null);
if ($allowedIds !== null && !in_array((int) ($player->admin_id ?? 0), $allowedIds, true)) {
return $this->fail('no permission to view this record');
}
if ((int) ($player->status ?? 1) === 0) {
return $this->fail('account is disabled');
}
$username = trim((string) ($player->username ?? ''));
if ($username === '') {
return $this->fail('username is empty');
}
$lang = trim((string) $request->input('lang', 'zh'));
if (!in_array($lang, ['zh', 'en'], true)) {
$lang = 'zh';
}
$exp = (int) config('api.session_expire', 604800);
$tokenResult = JwtToken::generateToken([
'id' => (int) $player->id,
'username' => $username,
'plat' => 'api_login',
'access_exp' => $exp,
]);
$token = (string) ($tokenResult['access_token'] ?? '');
if ($token === '') {
return $this->fail('generate token failed');
}
UserCache::setSessionByUsername($username, $token);
$userArr = $player->hidden(['password', 'lottery_config_id', 't1_weight', 't2_weight', 't3_weight', 't4_weight', 't5_weight'])->toArray();
UserCache::setUser((int) $player->id, $userArr);
UserCache::setPlayerByUsername($username, $userArr);
$gameUrlBase = rtrim((string) env('GAME_URL', (string) config('api.game_url', '')), '/');
if ($gameUrlBase === '') {
return $this->fail('GAME_URL is not configured');
}
$tokenInUrl = str_replace('%3D', '=', urlencode($token));
$url = $gameUrlBase . '/?token=' . $tokenInUrl . '&lang=' . $lang;
return $this->success(['url' => $url]);
}
/**
* 删除数据
* @param Request $request

View File

@@ -0,0 +1,28 @@
-- 玩家管理:新增“获取游戏链接”按钮权限
SET @now = NOW();
-- 优先使用已有“数据列表”按钮找到玩家菜单 ID
SET @player_menu_id = (
SELECT `parent_id` FROM `sa_system_menu`
WHERE `slug` = 'dice:player:index:index' AND `type` = 3
ORDER BY `id` ASC LIMIT 1
);
-- 兜底:按玩家菜单路径查找
SET @player_menu_id = IFNULL(
@player_menu_id,
(
SELECT `id` FROM `sa_system_menu`
WHERE `path` = 'player' AND `type` = 2
ORDER BY `id` ASC LIMIT 1
)
);
INSERT INTO `sa_system_menu`
(`parent_id`,`name`,`code`,`slug`,`type`,`path`,`component`,`method`,`sort`,`is_iframe`,`is_keep_alive`,`is_hidden`,`is_fixed_tab`,`is_full_page`,`generate_id`,`generate_key`,`status`,`create_time`,`update_time`)
SELECT @player_menu_id, '获取游戏链接', '', 'dice:player:index:getGameUrl', 3, '', '', '', 100, 2, 2, 2, 2, 2, 0, NULL, 1, @now, @now
WHERE @player_menu_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'dice:player:index:getGameUrl' AND `type` = 3
);

View File

@@ -94,6 +94,7 @@ Route::group('/core', function () {
Route::put('/dice/player/DicePlayer/updateStatus', [\app\dice\controller\player\DicePlayerController::class, 'updateStatus']);
Route::get('/dice/player/DicePlayer/getLotteryConfigOptions', [\app\dice\controller\player\DicePlayerController::class, 'getLotteryConfigOptions']);
Route::get('/dice/player/DicePlayer/getSystemUserOptions', [\app\dice\controller\player\DicePlayerController::class, 'getSystemUserOptions']);
Route::get('/dice/player/DicePlayer/getGameUrl', [\app\dice\controller\player\DicePlayerController::class, 'getGameUrl']);
fastRoute('dice/play_record/DicePlayRecord', \app\dice\controller\play_record\DicePlayRecordController::class);
Route::get('/dice/play_record/DicePlayRecord/getPlayerOptions', [\app\dice\controller\play_record\DicePlayRecordController::class, 'getPlayerOptions']);
Route::get('/dice/play_record/DicePlayRecord/getLotteryConfigOptions', [\app\dice\controller\play_record\DicePlayRecordController::class, 'getLotteryConfigOptions']);