|
|
@@ -71,18 +71,30 @@ class QcodeBach extends Backend
|
|
|
|
|
|
// 获取前端传参
|
|
|
$req = input();
|
|
|
- $sort = $req['sort'] == 'id' ? '_id' : $req['sort'];
|
|
|
- $order = $req['order'] ?? 'desc';
|
|
|
+
|
|
|
+ // 安全处理排序字段和排序方式
|
|
|
+ $sort = $req['sort'] ?? 'id';
|
|
|
+ $sort = $sort == 'id' ? '_id' : $sort;
|
|
|
+
|
|
|
+ // 定义允许排序的字段,防止注入
|
|
|
+ $allowedSortFields = ['_id', 'create_time', 'update_time', 'name']; // 按实际情况添加
|
|
|
+ if (!in_array($sort, $allowedSortFields)) {
|
|
|
+ $sort = '_id';
|
|
|
+ }
|
|
|
+
|
|
|
+ $orderStr = strtolower($req['order'] ?? 'desc');
|
|
|
+ $order = $orderStr === 'asc' ? 1 : -1; // MongoDB 排序必须是 1 或 -1
|
|
|
+
|
|
|
$offset = $req['offset'] ?? 0;
|
|
|
$limit = $req['limit'] ?? 20;
|
|
|
|
|
|
// 解析 filter 筛选条件
|
|
|
- $filter = json_decode($req['filter'], true);
|
|
|
- if (is_array($filter)) {
|
|
|
- foreach ($filter as $k => $v) {
|
|
|
- $where[$k] = new \MongoDB\BSON\Regex($v);
|
|
|
- }
|
|
|
- }
|
|
|
+// $filter = json_decode($req['filter'], true);
|
|
|
+// if (is_array($filter)) {
|
|
|
+// foreach ($filter as $k => $v) {
|
|
|
+// $where[$k] = new \MongoDB\BSON\Regex($v);
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
$list = [];
|
|
|
|
|
|
@@ -99,7 +111,7 @@ class QcodeBach extends Backend
|
|
|
$cid = $row['company'];
|
|
|
$rows = $this->model->name($cid . '_qcode_bach')
|
|
|
->where($where)
|
|
|
- ->select(); // 不分页,后面统一处理
|
|
|
+ ->select(); // 不分页,后续统一处理
|
|
|
|
|
|
foreach ($rows as &$item) {
|
|
|
$oid = $item['_id']->jsonSerialize();
|
|
|
@@ -113,23 +125,21 @@ class QcodeBach extends Backend
|
|
|
usort($list, function ($a, $b) use ($sort, $order) {
|
|
|
$valA = $a[$sort] ?? 0;
|
|
|
$valB = $b[$sort] ?? 0;
|
|
|
- return $order === 'asc' ? ($valA <=> $valB) : ($valB <=> $valA);
|
|
|
+ return $order === 1 ? ($valA <=> $valB) : ($valB <=> $valA);
|
|
|
});
|
|
|
|
|
|
// 总数与分页
|
|
|
$total = count($list);
|
|
|
$list = array_slice($list, $offset, $limit);
|
|
|
+
|
|
|
} else {
|
|
|
// 普通用户:只查本公司
|
|
|
- $model = $this->model->name($company_id . '_qcode_bach');
|
|
|
- $total = $model->where($where)->count();
|
|
|
-
|
|
|
- $list = $model->where($where)
|
|
|
+ $total = $this->model->name($company_id . '_qcode_bach')->where($where)->count();
|
|
|
+ $list = $this->model->name($company_id . '_qcode_bach')->where($where)
|
|
|
->order([$sort => $order])
|
|
|
->limit($limit)
|
|
|
->skip($offset)
|
|
|
->select();
|
|
|
-
|
|
|
foreach ($list as &$item) {
|
|
|
$oid = $item['_id']->jsonSerialize();
|
|
|
$item['id'] = $oid['$oid'];
|