如何正确配置ACL规则文件,禁用"设备离线"以外的系统主题?

出于安全考虑,默认的ACL配置会禁用系统主题。我想在此基础上放开“设备离线”的主题,其他系统主题仍然保持禁用,所以在默认配置里添加了一行规则:

{allow, {username, {re, “^dashboard$”}}, subscribe, [“$SYS/#”]}.

{allow, {ipaddr, “127.0.0.1”}, all, [“$SYS/#”, “#”]}.

%%允许订阅“设备离线”
{allow, all, subscribe, [“$SYS/brokers/+/clients/+/disconnected”]}.

{deny, all, subscribe, [“$SYS/#”, {eq, “#”}]}.

{allow, all}.

可是这样配置后,没有按照预期生效,“设备离线”的主题仍然订阅不到,除非把下面那条deny all的规则注释掉才行。

请问需要怎样配置,才能实现我的目的,即可以订阅到“设备离线“的系统主题,但禁用其他系统主题?谢谢!

你使用的 emqx 版本号是?

我试了一下,用了 emqx 5.7.1, 没有问题:

{allow, {username, {re, "^dashboard$"}}, subscribe, ["$SYS/#"]}.
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
{allow, all}.

感谢回复。

我用的版本是emqx 4.4.14。不过我也用最新的5.7.1试过,在“deny, all ……”这一行前允许订阅设备离线事件,即:

{allow, all, subscribe, [“$SYS/brokers/+/clients/+/disconnected”]}.
{deny, all, subscribe, [“$SYS/#”, {eq, “#”}]}.

这样配置不生效。官方文档里没有这种用例,网上找了一些类似的配置例子,也不生效。难道ACL不支持这样的使用方法吗?