Compare commits

...
1 Commits
Author SHA1 Message Date
wc24 eb339ccc49 feat(filter): buildQuery 放行 _id 精确过滤(单项查看/relation 跳转)
filter 原本只认 filterable 字段,_id 会被丢弃。新增: key==='_id' 时始终以 eq 放行,
让 ?filter={_id} 能过滤到单条。_id 是主键精确匹配、用户已有列表权限,无安全顾虑。
2026-06-29 20:40:28 +08:00
2 changed files with 6 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "shrimp-server", "name": "shrimp-server",
"version": "0.6.7", "version": "0.6.8",
"description": "Shrimp 框架后端 — 声明式字段驱动的 Node.js 管理后台框架(Express + Mongoose + JWT)", "description": "Shrimp 框架后端 — 声明式字段驱动的 Node.js 管理后台框架(Express + Mongoose + JWT)",
"main": "dist/main/index.js", "main": "dist/main/index.js",
"types": "dist/main/index.d.ts", "types": "dist/main/index.d.ts",
+5
View File
@@ -300,6 +300,11 @@ export class ShrimpTableModule<T, P extends ITableCrudProto<T> = ITableCrudProto
const stringLikeTypes = new Set(['string', 'textarea']) const stringLikeTypes = new Set(['string', 'textarea'])
const where: Record<string, IShrimpCondition> = {} const where: Record<string, IShrimpCondition> = {}
for (const [key, value] of Object.entries(filter)) { for (const [key, value] of Object.entries(filter)) {
// _id 始终放行精确过滤(单项查看/relation 跳转用),无需配 filterable
if (key === '_id') {
if (value != null && value !== '') where['_id'] = { eq: value }
continue
}
const field = filterableFields.get(key) const field = filterableFields.get(key)
if (!field) continue if (!field) continue
if (value == null) continue if (value == null) continue