描述你需要的功能
能通过acl配置文件实现 禁止某个用户订阅含有通配符的topic吗?
为什么你需要这个功能
防止某些用户一次性订阅太多的topic
是可以的,你看一下 etc/acl.conf 文件。
就是默认的配置文件,没有改动过。emqx 5.0.21
{allow, {username, "^dashboard?"}, subscribe, ["$SYS/#"]}.
{allow, {ipaddr, "127.0.0.1"}, all, ["$SYS/#", "#"]}.
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
{allow, all}.
{deny, {username,"test01"},subscribe,["\+\#\*"]}.
我回复的最后一行 是我自己加的,没有生效的。其他就是配置文件自带的
{deny, {username,"test01"},subscribe,["\+\#\*"]}.
{deny, {username,“test01”},subscribe,[“/+/#”]}.
解决了吗,我也遇到同样的问题。
{Deny, {username,“test01”},subscribe,[{re, “^[+#]$”}“]}.这是我想要的结果,但是目前第四个元素不支持正则
如果不行,那就是不支持了, 你可以尝试多个人用同一个账户,那样就可以直接禁用一个账户,就做到类似的效果了.
topic 不支持正则。
你是想禁止客户端订阅 +
或 #
对么
可以这样写:
{deny, {username, "test01"}, subscribe, [{eq, "+"}, {eq, "#"}]}.
我记得我最后放弃了,好像是不支持通配符的写法的. 你可以试试,我忘了
testtopic/test0123
和 authz 规则中的 “/+/#” 不匹配
不应该带最前面的 “/”
应该这样写
{deny, {username, "test01"}, subscribe, ["+/#"]}.
不过实际上这样会拒绝 test01 这个客户端订阅单层或多层的任意主题,换言之它无法订阅任何主题
不是 禁止客户端订阅 +
或 #
,而是想禁止客户端 订阅中包涵+ 和# 例如:禁用 link/+/+/data ,但是客户端能订阅 link/aa/bb/data 这个,就是检测 topic 中是否包含+或#,而不知只有 +或者#,感谢您的回复,非常感谢。
好的我明白了,再次感谢您的支持。
原来还有这个配置,学到了