我有一个数据库表"movies“,它有三个字段:id、title和user_id。在登录后,用户可以使用自定义的title创建新的电影。user_id会自动设置为当前登录的用户。
现在,在另一个页面上(也是在同一个登录页面后面),用户可以看到他们自己创建的所有电影列表。他们还可以使用文本字段对它们进行过滤,在那里他们可以开始键入内容,并且列表将会更新。
为了让搜索尽可能快,我用meilisearch索引了所有的电影。但目前每个用户也可以看到来自其他用户的电影。有没有可能确保每个用户只能看到他创建的电影?
我试着用来自meilisearch的php包来解决这个问题,它有一个自定义的路由,我可以检查用户访问,然后返回结果:
$results = $searchService->rawSearch(Channel::class, '', [
'facetFilters' => ['user_id:XXX'],
]);
// Return results to frontend as json
return $results;但我想直接在前端使用meilisearch,而不是通过后端,因为性能损失。那么,有没有可能在前端执行相同的搜索,而其他用户可以通过轻松更改搜索查询中的用户id来搜索来自其他用户的电影?是否可以保护搜索结果,或者我是否应该使用其他搜索引擎?如果是,你能推荐另一个开源搜索引擎吗?
发布于 2021-08-23 14:01:25
目前,MeiliSearch不提供多租户密钥管理。这是一个未来的改进,它将允许自动将搜索限制到执行搜索的用户的授权密钥中的可访问文档。
同时,可以有一个可以访问此文档的用户ids数组。通过在前端构建过滤器来推断正确的用户id将会起作用。这样做的限制是,某人可以自己删除此筛选器并查看其他文档。应该可以使用外观/代理(例如Kong )来避免此缺陷,该外观/代理检查是否存在user_id作为过滤器或覆盖它,但就像您所说的,这并不理想。
我们希望在2021年底之前添加这个功能!
https://stackoverflow.com/questions/68866312
复制相似问题