- 在多个控制器中更新权限检查逻辑,确保管理员能够更灵活地管理代理和玩家。 - 在 AdminPlayerStoreController 中引入对玩家创建能力的验证,确保只有具备相应权限的管理员能够创建玩家。 - 更新请求验证逻辑,新增 credit_limit、rebate_rate 和 extra_rebate_rate 字段,以支持更细粒度的玩家管理。 - 在 AgentNodeProfileController 中添加对父代理能力授予的验证,确保子代理的权限在父代理范围内。 - 引入 AgentProfileFieldRules 以简化代理资料更新请求的规则定义,提升代码复用性。
57 lines
1.8 KiB
PHP
57 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1\Admin\Player;
|
|
|
|
use App\Models\Player;
|
|
use Illuminate\Http\Request;
|
|
use App\Support\ApiResponse;
|
|
use Illuminate\Http\JsonResponse;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Support\AdminApiList;
|
|
use App\Support\AdminScopePolicy;
|
|
use App\Support\PlayerApiPresenter;
|
|
|
|
/** GET /api/v1/admin/players */
|
|
final class AdminPlayerIndexController extends Controller
|
|
{
|
|
public function __invoke(Request $request): JsonResponse
|
|
{
|
|
$admin = $request->lotteryAdmin();
|
|
abort_if($admin === null, 401);
|
|
|
|
$p = AdminApiList::readPaging($request);
|
|
$keyword = trim((string) $request->query('keyword', ''));
|
|
$status = $request->query('status');
|
|
$scope = AdminScopePolicy::resolveContext($request, $admin);
|
|
|
|
$q = Player::query()
|
|
->with([
|
|
'wallets' => static fn ($wq) => $wq->orderBy('wallet_type')->orderBy('currency_code'),
|
|
'agentNode:id,code,name',
|
|
])
|
|
->orderByDesc('id');
|
|
|
|
AdminScopePolicy::applyPlayerFilters($q, $scope);
|
|
|
|
if ($keyword !== '') {
|
|
$term = '%'.addcslashes($keyword, '%_\\').'%';
|
|
$q->where(static function ($sub) use ($term): void {
|
|
$sub->where('site_player_id', 'like', $term)
|
|
->orWhere('username', 'like', $term)
|
|
->orWhere('nickname', 'like', $term);
|
|
if (ctype_digit($keyword)) {
|
|
$sub->orWhere('id', (int) $keyword);
|
|
}
|
|
});
|
|
}
|
|
|
|
if ($status !== null && $status !== '') {
|
|
$q->where('status', (int) $status);
|
|
}
|
|
|
|
$paginator = $q->paginate($p['perPage'], ['*'], 'page', $p['page']);
|
|
|
|
return AdminApiList::json($paginator, fn (Player $player): array => PlayerApiPresenter::listItem($player));
|
|
}
|
|
}
|