0

我有一个包含三个字段的数据库表“电影” idtitleuser_id。登录后用户可以使用自定义创建新电影titleuser_id自动设置为当前登录的用户。

现在在另一个页面上(也在同一个登录之后),用户可以看到他们自己创建的所有电影作为一个列表。他们还可以使用可以开始输入的文本字段来过滤它们,并且列表将被更新。

为了使搜索尽可能快,我用meilisearch. 但目前每个用户也可以看到其他用户的电影。是否可以确保每个用户只能看到他创建的电影?

我尝试meilisearch使用自定义路由的 php 包解决它,我可以在其中检查用户访问权限,然后返回结果:

$results = $searchService->rawSearch(Channel::class, '', [
    'facetFilters' => ['user_id:XXX'],
]);

// Return results to frontend as json
return $results;

但是由于性能损失,我想meilisearch直接在前端使用,而不是通过后端。那么是否可以在前端进行相同的搜索,而其他用户可以通过轻松更改搜索查询中的用户 ID 来搜索其他用户的电影?是否可以保护搜索结果或者我应该使用其他搜索引擎?如果是,你能推荐另一个开源搜索引擎吗?

4

1 回答 1

0

目前,MeiliSearch 不提供多租户密钥管理。这是一个未来的改进,它将允许自动将搜索限制为来自正在执行搜索的用户的授权密钥的可访问文档。

同时,可能有一组用户 id 可以访问该文档。通过在前端构建过滤器来推断正确的用户 ID 将起作用。这样做的限制是有人可以自己删除此过滤器并查看其他文档。应该可以使用外观/代理(例如 Kong)来避免此缺陷,该外观/代理检查是否存在 user_id 作为过滤器或覆盖它,但就像您说的那样,这并不理想。

我们希望在 2021 年底之前添加此功能!

于 2021-08-23T14:01:24.983 回答