Skip to content

Commit 9020d12

Browse files
authored
Merge pull request #182 from fleetbase/dev-v1.6.30
Fix: Critical cache key collision bug in ApiModelCache
2 parents b637c41 + 9b36e81 commit 9020d12

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fleetbase/core-api",
3-
"version": "1.6.29",
3+
"version": "1.6.30",
44
"description": "Core Framework and Resources for Fleetbase API",
55
"keywords": [
66
"fleetbase",

src/Models/Permission.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Fleetbase\Traits\Filterable;
66
use Fleetbase\Traits\HasApiModelBehavior;
7+
use Fleetbase\Traits\HasApiModelCache;
78
use Fleetbase\Traits\HasUuid;
89
use Fleetbase\Traits\Searchable;
910
use Illuminate\Support\Collection;
@@ -13,6 +14,7 @@ class Permission extends BasePermission
1314
{
1415
use HasUuid;
1516
use HasApiModelBehavior;
17+
use HasApiModelCache;
1618
use Searchable;
1719
use Filterable;
1820

src/Support/ApiModelCache.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,22 @@ public static function generateQueryCacheKey(Model $model, Request $request, arr
5858
$table = $model->getTable();
5959
$companyUuid = static::getCompanyUuid($request);
6060

61-
// Get all relevant query parameters
62-
$params = [
63-
'limit' => $request->input('limit'),
64-
'offset' => $request->input('offset'),
65-
'page' => $request->input('page'),
66-
'sort' => $request->input('sort'),
67-
'order' => $request->input('order'),
68-
'query' => $request->input('query'),
69-
'search' => $request->input('search'),
70-
'filter' => $request->input('filter'),
71-
'with' => $request->input('with'),
72-
'expand' => $request->input('expand'),
73-
'columns' => $request->input('columns'),
61+
// Get ALL query parameters from the request
62+
// This ensures different filters (e.g., type=customer vs type=contact) generate different cache keys
63+
$params = $request->query();
64+
65+
// Remove internal/non-cacheable parameters that shouldn't affect cache key
66+
$excludedParams = [
67+
'_', // Cache-busting timestamp
68+
'timestamp', // Cache-busting timestamp
69+
'nocache', // Explicit cache bypass
70+
'_method', // Laravel method override
7471
];
7572

73+
foreach ($excludedParams as $excluded) {
74+
unset($params[$excluded]);
75+
}
76+
7677
// Merge additional parameters
7778
$params = array_merge($params, $additionalParams);
7879

src/Traits/HasApiModelBehavior.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,12 +1125,18 @@ private function applyOperators($builder, $column_name, $op_key, $op_type, $valu
11251125
*/
11261126
public function shouldQualifyColumn($column_name)
11271127
{
1128-
return in_array($column_name, [
1128+
$qualifiableColumns = [
11291129
$this->getKey() ?? 'uuid',
11301130
$this->getCreatedAtColumn() ?? 'created_at',
11311131
$this->getUpdatedAtColumn() ?? 'updated_at',
1132-
$this->getDeletedAtColumn() ?? 'deleted_at',
1133-
]);
1132+
];
1133+
1134+
// Only include deleted_at column if model uses SoftDeletes trait
1135+
if (method_exists($this, 'getDeletedAtColumn')) {
1136+
$qualifiableColumns[] = $this->getDeletedAtColumn();
1137+
}
1138+
1139+
return in_array($column_name, $qualifiableColumns);
11341140
}
11351141

11361142
/**

0 commit comments

Comments
 (0)