From 6ee475d9b12a311da2ff693e4e80532a77355e6f Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Thu, 24 Nov 2022 17:56:14 +0100 Subject: [PATCH] fix(emqx_authz_api_mnesia): return the right matchers --- apps/emqx_authz/src/emqx_authz_api_mnesia.erl | 14 +++++-- apps/emqx_management/src/emqx_mgmt_api.erl | 40 ++++++++++--------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/apps/emqx_authz/src/emqx_authz_api_mnesia.erl b/apps/emqx_authz/src/emqx_authz_api_mnesia.erl index f480934a0..090f9d1e2 100644 --- a/apps/emqx_authz/src/emqx_authz_api_mnesia.erl +++ b/apps/emqx_authz/src/emqx_authz_api_mnesia.erl @@ -578,13 +578,19 @@ purge(delete, _) -> %%-------------------------------------------------------------------- %% QueryString to MatchSpec --spec query_username(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec query_username(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). query_username(_Tab, {_QString, FuzzyQString}) -> - {emqx_authz_mnesia:list_username_rules(), fuzzy_filter_fun(FuzzyQString)}. + #{ + match_spec => emqx_authz_mnesia:list_username_rules(), + fuzzy_fun => fuzzy_filter_fun(FuzzyQString) + }. --spec query_clientid(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec query_clientid(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). query_clientid(_Tab, {_QString, FuzzyQString}) -> - {emqx_authz_mnesia:list_clientid_rules(), fuzzy_filter_fun(FuzzyQString)}. + #{ + match_spec => emqx_authz_mnesia:list_clientid_rules(), + fuzzy_fun => fuzzy_filter_fun(FuzzyQString) + }. %% Fuzzy username funcs fuzzy_filter_fun([]) -> diff --git a/apps/emqx_management/src/emqx_mgmt_api.erl b/apps/emqx_management/src/emqx_mgmt_api.erl index 5f8e39f13..9f69ed3f0 100644 --- a/apps/emqx_management/src/emqx_mgmt_api.erl +++ b/apps/emqx_management/src/emqx_mgmt_api.erl @@ -35,6 +35,28 @@ b2i/1 ]). +-export_type([ + match_spec_and_filter/0 +]). + +-type query_params() :: list() | map(). + +-type query_schema() :: [ + {Key :: binary(), Type :: atom | binary | integer | timestamp | ip | ip_port} +]. + +-type query_to_match_spec_fun() :: fun((list(), list()) -> match_spec_and_filter()). + +-type match_spec_and_filter() :: #{match_spec := ets:match_spec(), fuzzy_fun := fuzzy_filter_fun()}. + +-type fuzzy_filter_fun() :: undefined | {fun(), list()}. + +-type format_result_fun() :: + fun((node(), term()) -> term()) + | fun((term()) -> term()). + +-type query_return() :: #{meta := map(), data := [term()]}. + -export([do_query/2, apply_total_query/1]). paginate(Tables, Params, {Module, FormatFun}) -> @@ -121,24 +143,6 @@ limit(Params) -> %% Node Query %%-------------------------------------------------------------------- --type query_params() :: list() | map(). - --type query_schema() :: [ - {Key :: binary(), Type :: atom | binary | integer | timestamp | ip | ip_port} -]. - --type query_to_match_spec_fun() :: fun((list(), list()) -> match_spec_and_filter()). - --type match_spec_and_filter() :: #{match_spec := ets:match_spec(), fuzzy_fun := fuzzy_filter_fun()}. - --type fuzzy_filter_fun() :: undefined | {fun(), list()}. - --type format_result_fun() :: - fun((node(), term()) -> term()) - | fun((term()) -> term()). - --type query_return() :: #{meta := map(), data := [term()]}. - -spec node_query( node(), atom(),