是否可以在 MQTT 主题中仅向用户显示某些消息?

Is it possible to show only certain messages to users in MQTT topics?

我的目标是使用 MQTT 总线扩展 HTTPS REST API 平台。我正在尝试找出解决此问题的最佳方法。

主题示例:
我有一个包含以下端点的 HTTPS REST API。
1) /files/{fileId}
2) /files

如果我想根据 fileId 限制用户,主题 1 很容易。如果允许某人看到这个文件,他们可以订阅,否则他们不能。

现在我的问题是关于第二个话题。是否有可能发布到 /files 但只向订阅者显示允许他们查看的数据?

消息示例:
我将这些消息发布到 /files

{
    "fileName": "Test.txt",
    "fileId": 123456,
    "Author": "Bert",
    "Content": "Hello World"
}
------
{
    "fileName": "Test2.txt",
    "fileId": 654321,
    "Author": "Hank",
    "Content": "Foo Bar"
}

Bert 和 Hank 都订阅了 /files,但他们只能查看自己的文件(Bert = 123456,Hank = 654321)。

更新:
this 文章中,主题以 myhome 等开头。这可能与上面的示例相同。如果我发布到myhome,当我有多个用户时,我怎么知道只有这个用户。

MQTT 的 ACL 方案倾向于纯粹基于用户名和对主题(或通配符主题)的访问。

消息发布到主题,无法指定更多内容(例如用户名或客户端 ID)。

必须进行消息负载检查以确定订阅者是否能够看到特定消息会对性能产生巨大影响。此外,由于没有规定的消息有效负载格式(您可以发送任何字节数组有效负载),因此很难想出一种方法来指定要过滤的消息的哪些部分。

您也许可以通过修改开源代理来实现类似的功能,但我怀疑这是否容易。

你的例子看起来很复杂。也许我们这里有 XY-problem 个案例。您似乎想 [ab] 使用 public-订阅者机制作为非安全(广播)网络上的点对点机制,例如没有加密的 WiFi 或没有交换机而是集线器的以太网。

在那种情况下,您可能希望使用端点作为主题 (networknode{1, 2, ...}),以解决个别计算机的问题,如果答案不被所有人看到,您将不得不加密它们。然后您需要一种分发密钥的机制。

或者您可能只想使用纯 HTTPS。 MQTT 是物联网世界向前迈出的一大步,但它不是灵丹妙药。 另一方面,为什么文件ID不是主题的一部分?