将 PCRE 翻译成 RabbitMQ/Erlang 正则表达式

Translate PCRE to RabbitMQ/Erlang regex

我正在为 RabbitMQ 设置用户帐户和权限。 这个想法是用户被称为 "user1, "user2",... 并且有一个单独的队列 "all-users" - 你猜对了 - 所有用户都可以访问。

我想出了以下正则表达式:

^user[0-9]+|all\-users$

并在 https://regex101.com/

进行了测试
bob [no match]
alice [no match]
user5 [match]
user99 [match]
user [no match]
all-users [match]

它按预期工作。 但是,我的 RabbitMQ 却不是这样。 具体来说,当使用任何 user{n} 帐户发布到 all-users 时,我得到一个 403 - ACCESS REFUSED。 如果我将写权限更改为 .* 它工作正常,但这不是我想要的。

我还尝试对我的正则表达式进行以下修改,none 其中在 RabbitMQ 中有效,但它们主要在 regex101 中执行:

我知道其他人也问过类似的问题 (here or here),但是(就像我自己的问题一样)他们都很具体,对我的问题帮助不大。

P.S.: 我正在使用 RabbitMQ Management UI 设置权限以便于调试,但在命令行上设置它们具有完全相同的效果

好的,在睡了一夜好觉之后,我又看了一遍(不是很出色的)RabbitMQ 文档。

我的示例基于 rabbitmqctl 的文档,其中展示了如何设置“对名称以“janeway-”开头的所有资源”的权限:

"^janeway-.*"

但是,access control docs 包含不同操作所需的 table 权限。 basic.publish 操作(将消息发布到队列)需要(对我来说非常违反直觉)对 exchange 的写入权限,而不是队列。 我没有使用自定义交换,在我的 python 代码中将字段留空,这显然导致使用默认交换 (amq.default)。问题是我一直使用的用户帐户有权访问名为“user1”、“user2”...和“all-users”的资源,但不包括 amq.default.



TL;DR:

权限应该是

^(user[0-9]+|all-users|amq.default)$

或其变体。