Meilisearch v1.14 发布啦 ✨ 在我们的博客上阅读更多内容

转到主页Meilisearch 的标志
返回文章
2023 年 7 月 4 日

如何使用 Meilisearch 实现 RBAC

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

Carolina Ferreira
Carolina Ferreira开发者布道师 @ Meilisearch@CarolainFG
How to implement RBAC with Meilisearch

本指南面向高级和中级开发人员,将提供一个清晰的路线图,帮助您在应用程序中高效管理数据访问。

了解基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种根据企业中各个用户的角色来管理对计算机或网络资源访问的方法。在应用程序的上下文中,它指的是控制哪些用户可以访问哪些信息,从而确保数据隐私和安全。

Meilisearch 为 RBAC 提供了一个优雅的解决方案:租户令牌。 租户令牌允许您轻松限制用户对其被允许查看的特定数据的访问权限。

使用 Meilisearch 在类似 Notion 的应用程序中实现 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,
    }
 

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:应用程序搜索结果中显示的属性。 在本例中,我们显示页面 idpathtitleupdated_at

  • searchableAttributes:可以搜索的属性。 对于类似 Notion 的应用程序,页面的 titlecontent 最为相关

  • filterableAttributes:您可以按这些属性进行过滤。 我们包含了 workspace_idcan_view,以便根据工作区和用户权限控制对页面的访问

  • sortableAttributes:您可以按这些属性对搜索结果进行排序。 我们包含了 created_atupdated_at,以支持按创建和修改日期对页面进行排序

创建租户令牌

在配置好 Meilisearch 后,下一步是为每个用户创建一个新的租户令牌。 如果您没有特别的安全考虑,可以省略过期日期以简化您的入职流程。

租户令牌的关键部分是 searchRules。 在我们的示例中,您将添加以下规则

    {
        "pages": {
            "filter": "workspace_id = c3d3e966-60e2-4390-9d49-0a9d60f8f02d && can_view = 45c233cd-8160-4a38-8347-b13bc4709345"
        }
    }

使用生成的令牌,您的搜索将根据 workspace_idcan_view(用户 ID)限制访问,以便用户只能看到他们有权访问的页面。

将此令牌存储在您的主数据存储中(Postgres、MySQL 等)。 这种机制类似于 Stripe 等工具中使用的机制。

每次用户登录您的应用程序时,将此密钥加载到本地存储中,并将其用于搜索,从而确保每个用户只能访问他们应该访问的数据。

正在寻找详细的分步教程? 浏览我们关于多租户的深入文章

总结

使用 Meilisearch 实现 RBAC 使您能够创建具有细粒度访问控制的应用程序,从而确保用户只能访问他们被允许查看的数据。 通过遵循本指南,您可以提高应用程序的数据安全性和隐私性,同时仍然为用户提供无缝的搜索体验。 如果您有任何问题,可以加入我们的 Discord

编码愉快!

要了解更多关于 Meilisearch 的信息,请订阅我们的新闻通讯。 您可以通过查看我们的路线图并参与我们的产品讨论来了解更多关于我们产品的信息。

Meilisearch indexes embeddings 7x faster with binary quantization

Meilisearch 使用二元量化将嵌入向量索引速度提高 7 倍

通过将二元量化与向量存储 Arroy 结合使用,在保持搜索相关性和效率的同时,大幅减少了大型嵌入向量的磁盘空间使用量和索引时间。

Tamo
Tamo2024 年 11 月 29 日
How to add AI-powered search to a React app

如何向 React 应用程序添加 AI 驱动的搜索

使用 Meilisearch 的 AI 驱动搜索构建一个 React 电影搜索和推荐应用程序。

Carolina Ferreira
Carolina Ferreira2024 年 9 月 24 日
Meilisearch is too slow

Meilisearch 速度太慢

在这篇博文中,我们将探讨 Meilisearch 文档索引器所需的增强功能。 我们将讨论当前的索引引擎、其缺点以及优化性能的新技术。

Clément Renault
Clément Renault2024 年 8 月 20 日