# svfs 消息模块的 ACL 示例(最小权限)。默认**未启用**——要用就在 # mosquitto.conf 里解开 allow_anonymous false / password_file / acl_file 三行, # 否则这份文件不会生效。 # # 规则先记两条,踩坑都出在这儿: # # * 这里的 <用户名> 是 **MQTT 连接的 username**。客户端默认用 svfs 登录名 # (settings.mqtt_config:mqtt_username 留空 = 登录名),所以通常两者一致; # 在设置里覆盖过 broker 账号时,以覆盖后的为准。 # * 组织标识(下面的 default)要**换成你的 SVFS_ORG**,且不能写成通配—— # 多租户隔离靠的就是这一段。用户名里有特殊字符时按百分号编码填 # (拿 svfs_client.topics.topic_segment 算一下,例如「张三」→ %E5%BC%A0%E4%B8%89)。 # ---- 匿名段:第一个 user 之前的规则属于匿名连接 ---------------------- # # 开了 allow_anonymous false 后这一段就没用了(示例服务端届时要用下面的 # svfs-server 账号发布)。留着是为了「允许匿名发布、但读取仍受控」的折中场景。 topic write svfs/default/user/+/message topic write svfs/default/user/+/plugin/+ topic write svfs/default/broadcast/# # ---- 服务端发布账号 -------------------------------------------------- # # 服务端要能给任意用户写消息;它只需要写,不需要读。 user svfs-server topic write svfs/default/user/+/message topic write svfs/default/user/+/plugin/+ topic write svfs/default/broadcast/# topic write svfs/default/broadcast/plugin/+ # ---- 客户端:每人只读自己那两条订阅主题 ------------------------------ # # 客户端登录后订阅的是 svfs//user/<自己>/# 与 svfs//broadcast/#, # 所以只给这些就够(读不到别人的消息、也没有写权限)。 user alice topic read svfs/default/user/alice/# topic read svfs/default/broadcast/# user bob topic read svfs/default/user/bob/# topic read svfs/default/broadcast/# # ---- 等价的通配写法(可选) ------------------------------------------ # # 用户多了不想一个个写,可以用 pattern:%u 会被替换成连接用的用户名。 # 前提是 %u 独占一个主题层级(不能写成 svfs/default/user/%u-2/# 这种)。 # 注意 pattern 对所有用户生效(包括匿名与 svfs-server),所以这里只给读。 # # pattern read svfs/default/user/%u/# # pattern read svfs/default/broadcast/#