fix: support both exclusive and public resources for logged in users, include flags in quick returns

This commit is contained in:
2026-05-21 14:36:02 +08:00
parent dc72a8ccaf
commit 436f69c272
@@ -129,12 +129,22 @@ class AssetAppController extends BaseApiController
$usedResourceIds = [];
if ($user) {
// 登录用户:只看自己的专属资源
$resourceIds = AssetUserResource::where('user_id', $user->id)->column('resource_id');
if (empty($resourceIds)) {
return $this->data(['lists' => [], 'count' => 0, 'page_no' => $pageNo, 'page_size' => $pageSize]);
}
$query = $query->whereIn('id', $resourceIds);
// 登录用户:自己的专属资源 + 所有公开资源
$exclusiveIds = AssetUserResource::where('user_id', $user->id)->column('resource_id');
$associatedResourceIds = AssetUserResource::column('resource_id');
$query = $query->where(function ($q) use ($exclusiveIds, $associatedResourceIds) {
if (!empty($exclusiveIds)) {
$q->whereIn('id', $exclusiveIds);
}
if (!empty($associatedResourceIds)) {
if (!empty($exclusiveIds)) {
$q->whereOr('id', 'not in', $associatedResourceIds);
} else {
$q->whereNotIn('id', $associatedResourceIds);
}
}
});
// 获取该用户的使用记录
$usedResourceIds = \think\facade\Db::name('asset_resource_usage')
@@ -148,7 +158,14 @@ class AssetAppController extends BaseApiController
}
} elseif ($usageStatus === 2) { // 已使用
if (empty($usedResourceIds)) {
return $this->data(['lists' => [], 'count' => 0, 'page_no' => $pageNo, 'page_size' => $pageSize]);
return $this->data([
'lists' => [],
'count' => 0,
'page_no' => $pageNo,
'page_size' => $pageSize,
'is_disabled' => $isDisabled,
'token_invalid' => $tokenInvalid,
]);
}
$query = $query->whereIn('id', $usedResourceIds);
}