如何使用 Meilisearch 实现 RBAC
了解如何使用 Meilisearch 在您的应用程序中实现基于角色的访问控制 (RBAC)。

本指南适用于高级和中级开发者,将提供在您的应用程序中高效管理数据访问的清晰路线图。
理解基于角色的访问控制
基于角色的访问控制 (RBAC) 是一种根据企业内用户的角色来规范其对计算机或网络资源访问权限的方法。在应用程序的上下文中,它指的是控制哪些用户可以访问哪些信息,从而确保数据隐私和安全。
Meilisearch 提供了一种优雅的 RBAC 解决方案:租户令牌。租户令牌允许您轻松地限制用户访问其被授权查看的特定数据。
在类似 Notion 的应用程序中用 Meilisearch 实现 RBAC
让我们以 Notion 为例来阐述这一概念,Notion 是一个多功能工作空间,您可以在其中撰写、规划、协作和整理。
在我们简化的 Notion 版本中,用户属于一个工作空间,每个工作空间包含页面。一些用户可能可以访问某些页面,而另一些用户则不能。
一个页面可以表示如下
{ "id": "477f110a-848a-4c23-969d-e7ff7a648c65", "workspace_id": "c3d3e966-60e2-4390-9d49-0a9d60f8f02d", "path": "/knowledge base/hello world", "title": "Hello World", "content": "#This is the first page", "can_view": [ "ec6dfb90-2e89-4912-8e01-a25bb2a5a524", "b315c817-b3c4-4604-bd1f-122e5e452c91", "45c233cd-8160-4a38-8347-b13bc4709345", "ab58453d-6d56-496d-a5fa-ddb7c76b5a29", "d6de8463-5514-4bfe-90ba-471fbe9a23c6", ], "created_at": 1686512258, "updated_at": 1686512329, }
The can_view
属性是所有有权访问此页面的 user_id
的列表。
在文档中了解如何更新您的设置。
接下来,您需要创建一个 pages
索引并添加以下设置:
{ "displayedAttributes": [ "id", "path", "title", "updated_at" ], "searchableAttributes": [ "title", "content" ], "filterableAttributes": [ "workspace_id", "can_view" ], "sortableAttributes": [ "created_at", "updated_at" ] }
以下是对这些属性的简要说明
-
displayedAttributes
:在您的应用程序搜索结果中显示的属性。在此示例中,我们显示页面的id
、path
、title
和updated_at
。 -
searchableAttributes
:可搜索的属性。对于类似 Notion 的应用程序,页面的title
和content
将是最相关的。 -
filterableAttributes
:这些是您可以用于过滤的属性。我们包含了workspace_id
和can_view
,以根据工作空间和用户权限控制页面访问。 -
sortableAttributes
:这些是您可以对搜索结果进行排序的属性。我们包含了created_at
和updated_at
,以支持按创建日期和修改日期对页面进行排序。
创建租户令牌
配置好 Meilisearch 后,下一步是为每个用户创建一个新的租户令牌。如果您没有特殊的安全顾虑,可以省略过期日期以简化您的入门过程。
租户令牌的关键部分是 searchRules
。在我们的示例中,您将添加以下规则:
{ "pages": { "filter": "workspace_id = c3d3e966-60e2-4390-9d49-0a9d60f8f02d && can_view = 45c233cd-8160-4a38-8347-b13bc4709345" } }
通过生成的令牌,您的搜索将根据 workspace_id
和 can_view
(用户 ID)限制访问,因此用户将只能看到他们有权访问的页面。
将此令牌存储在您的主要数据存储(Postgres、MySQL 等)中。这种机制类似于 Stripe 等工具中使用的机制。
每次用户登录您的应用程序时,将此密钥加载到本地存储中,并将其用于搜索,从而确保每个用户只能访问其应有权访问的数据。
正在寻找详细的分步教程?请查阅我们关于多租户的深入文章。
总结
使用 Meilisearch 实现 RBAC 使您能够创建具有细粒度访问控制的应用程序,确保用户只能访问他们被授权查看的数据。通过遵循本指南,您可以提高应用程序的数据安全性和隐私性,同时仍为用户提供无缝的搜索体验。如果您有任何疑问,可以在 Discord 上加入我们。
编码愉快!
如需了解更多关于 Meilisearch 的信息,请订阅我们的新闻通讯。您还可以通过查看我们的路线图和参与我们的产品讨论来了解更多关于我们的产品。