挂载回调函数到 client.authenticate
钩子:
钩子回调函数必须接受一个 Credentials
参数,并且返回一个新的 Credentials:
on_client_authenticate(Credentials = #{password := Password}) ->
{ok, Credentials#{result => success}}.
编写 ACL 钩子回调函数
挂载回调函数到 client.authenticate
钩子:
emqx:hook('client.check_acl', fun ?MODULE:on_client_check_acl/4, []).
回调函数必须可接受 Credentials
, AccessType
, Topic
, ACLResult
这几个参数, 然后返回一个新的 ACLResult:
emqx_mod_acl_internal
模块实现了基于 etc/acl.conf 文件的 ACL 机制,etc/acl.conf 文件的默认内容:
%%%-----------------------------------------------------------------------------
%%%
%%% -type who() :: all | binary() |
%%% {ipaddr, esockd_access:cidr()} |
%%% {user, binary()}.
%%%
%%% -type access() :: subscribe | publish | pubsub.
%%%
%%% -type topic() :: binary().
%%% -type rule() :: {allow, all} |
%%% {allow, who(), access(), list(topic())} |
%%% {deny, all} |
%%%
%%%-----------------------------------------------------------------------------
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
由 emqx 提供的 Auth/ACL 插件: