THZ34
1
* 描述问题
我在页面中添加了一个表,设置数据范围的时候用了"最后修改人ID 等于当前用户ID"筛选条件。
但是设置之后表变成空的,即使表中有一些数据的最后修改人是当前用户。
通过log发现请求中的filter是 “filter”:{“$and”:[{“updatedBy”:{“id”:{“$eq”:“{{$user.id}}”}}}]}}
我申请了一个demo网站,执行了相同的操作,能够正确地筛选数据,并且log中的filter是"filter":{“$and”:[{“updatedBy”:{“id”:{“$eq”:2}}}]}
也就是说,在我部署的网站中进行筛选时,"{{$user.id}}"没有被正确代入为当前用户的ID, 导致数据范围设置错误。这是什么原因导致的,应该怎么解决?
* 运行环境
- 操作系统: Ubuntu
-浏览器及版本 edge
如何重现
预期行为
我部署的nocobase的log
截图
申请的demo网站的log
日志
THZ34
2
{“level”:“info”,“message”:“response /api/uiSchemas:patch”,“method”:“POST”,“path”:“/api/uiSchemas:patch”,“res”:{“status”:200},“action”:{“actionName”:“patch”,“resourceName”:“uiSchemas”,“params”:{“resourceName”:“uiSchemas”,“actionName”:“patch”,“values”:{“x-uid”:“akjyey1v3in”,“x-decorator-props”:{“action”:“list”,“params”:{“filter”:{“$and”:[{“customerBindsale”:{“employerUserID”:{“id”:{“$eq”:“{{$user.id}}”}}}}]},“pageSize”:200},“rowKey”:“customerID”,“dragSort”:true,“showIndex”:true,“collection”:“customers”,“dataSource”:“main”,“dataLoadingMode”:“auto”}}}},“userId”:2,“status”:200,“cost”:75,“app”:“main”,“reqId”:“a2933eac-dbc1-4804-bed0-8f75bf2ef0bf”,“bodySize”:24,“timestamp”:“2024-12-06 20:08:57”}
{“level”:“info”,“message”:“filter-parse: “,“meta”:{”$user”:{“id”:13}},“module”:“customers”,“submodule”:“list”,“method”:“”,“app”:“main”,“reqId”:“dce7403e-b5de-4815-9e1d-3b0db0b30f6e”,“dataSourceKey”:“main”,“timestamp”:“2024-12-06 20:08:57”}
绝了,在请求中 “userId”:2的情况下,还能"meta":{“$user”:{“id”:13}}
chenos
3
{“level”:“info”,“message”:“response /api/uiSchemas:patch”,“method”:“POST”,“path”:“/api/uiSchemas:patch”,“res”:{“status”:200},“action”:{“actionName”:“patch”,“resourceName”:“uiSchemas”,“params”:{“resourceName”:“uiSchemas”,“actionName”:“patch”,“values”:{“x-uid”:“akjyey1v3in”,“x-decorator-props”:{“action”:“list”,“params”:{“filter”:{“$and”:[{“customerBindsale”:{“employerUserID”:{“id”:{“$eq”:“{{$user.id}}”}}}}]},“pageSize”:200},“rowKey”:“customerID”,“dragSort”:true,“showIndex”:true,“collection”:“customers”,“dataSource”:“main”,“dataLoadingMode”:“auto”}}}},“userId”:2,“status”:200,“cost”:75,“app”:“main”,“reqId”:“a2933eac-dbc1-4804-bed0-8f75bf2ef0bf”,“bodySize”:24,“timestamp”:“2024-12-06 20:08:57”}
{“level”:“info”,“message”:“filter-parse: “,“meta”:{”$user”:{“id”:13}},“module”:“customers”,“submodule”:“list”,“method”:“”,“app”:“main”,“reqId”:“dce7403e-b5de-4815-9e1d-3b0db0b30f6e”,“dataSourceKey”:“main”,“timestamp”:“2024-12-06 20:08:57”}
第一个请求是 “reqId”:“a2933eac-dbc1-4804-bed0-8f75bf2ef0bf”
第二个请求是 “reqId”:“dce7403e-b5de-4815-9e1d-3b0db0b30f6e”
不是一条请求
zeke
4
你好,正常情况下,数据范围这里的 “当前用户” 变量是放到后端解析的。所以前端传输的就是 “filter”:{“$and”:[{“updatedBy”:{“id”:{“$eq”:“{{$user.id}}”}}}]}}
这样的字样。然后后端去解析 {{$user.id}}”}}
的值。
你提供的日志信息,看起来是一些不相关的信息。查看这里的请求参数,最简单的方法就是在浏览器的开发者工具里查看。如下图所示:
THZ34
5
demo网站前端向后端发送的请求是“{{$user.id}}”,但是log中显示的是2, 这个过程中useid是需要被替换成实际的值而不是直接使用变量名
THZ34
7
而且我检查过所有数据,从实际结果来看,我登录的是ID为2的账户,设置数据范围之后筛选出来的数据的最后修改人是ID为13的用户