Merge pull request #8046 from savonarola/fix-authn-user-search-api

fix(authn): fix user search API
This commit is contained in:
Ilya Averyanov 2022-05-25 17:25:18 +03:00 committed by GitHub
commit 26c83f40df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 18 additions and 59 deletions

View File

@ -204,25 +204,14 @@ emqx_authn_api {
} }
} }
like_username { like_user_id {
desc { desc {
en: """Fuzzy search username.""" en: """Fuzzy search user_id (username or clientid)."""
zh: """使用用户模糊查询。""" zh: """使用用户 ID username 或 clientid模糊查询。"""
} }
label { label {
en: """like_username""" en: """like_user_id"""
zh: """模糊用户名""" zh: """like_user_id"""
}
}
like_clientid {
desc {
en: """Fuzzy search clientid."""
zh: """使用客户端标识符模糊查询。"""
}
label {
en: """like_clientid"""
zh: """模糊用户名"""
} }
} }

View File

@ -429,16 +429,10 @@ schema("/authentication/:id/users") ->
param_auth_id(), param_auth_id(),
ref(emqx_dashboard_swagger, page), ref(emqx_dashboard_swagger, page),
ref(emqx_dashboard_swagger, limit), ref(emqx_dashboard_swagger, limit),
{like_username, {like_user_id,
mk(binary(), #{ mk(binary(), #{
in => query, in => query,
desc => ?DESC(like_username), desc => ?DESC(like_user_id),
required => false
})},
{like_clientid,
mk(binary(), #{
in => query,
desc => ?DESC(like_clientid),
required => false required => false
})}, })},
{is_superuser, {is_superuser,

View File

@ -69,8 +69,7 @@
-define(TAB, ?MODULE). -define(TAB, ?MODULE).
-define(AUTHN_QSCHEMA, [ -define(AUTHN_QSCHEMA, [
{<<"like_username">>, binary}, {<<"like_user_id">>, binary},
{<<"like_clientid">>, binary},
{<<"user_group">>, binary}, {<<"user_group">>, binary},
{<<"is_superuser">>, atom} {<<"is_superuser">>, atom}
]). ]).
@ -319,14 +318,9 @@ run_fuzzy_filter(_, []) ->
true; true;
run_fuzzy_filter( run_fuzzy_filter(
E = #user_info{user_id = {_, UserID}}, E = #user_info{user_id = {_, UserID}},
[{username, like, UsernameSubStr} | Fuzzy] [{user_id, like, UsernameSubStr} | Fuzzy]
) -> ) ->
binary:match(UserID, UsernameSubStr) /= nomatch andalso run_fuzzy_filter(E, Fuzzy); binary:match(UserID, UsernameSubStr) /= nomatch andalso run_fuzzy_filter(E, Fuzzy).
run_fuzzy_filter(
E = #user_info{user_id = {_, UserID}},
[{clientid, like, ClientIDSubStr} | Fuzzy]
) ->
binary:match(UserID, ClientIDSubStr) /= nomatch andalso run_fuzzy_filter(E, Fuzzy).
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
%% Internal functions %% Internal functions

View File

@ -218,7 +218,7 @@ t_list_users(_) ->
#{ #{
<<"page">> => 1, <<"page">> => 1,
<<"limit">> => 20, <<"limit">> => 20,
<<"like_username">> => <<"3">> <<"like_user_id">> => <<"3">>
}, },
State State
). ).

View File

@ -77,17 +77,10 @@ emqx_gateway_api_authn {
} }
} }
like_username { like_user_id {
desc { desc {
en: """Fuzzy search by username""" en: """Fuzzy search by user_id (username or clientid)"""
zh: """Username 模糊搜索""" zh: """用户 ID username 或 clientid模糊搜索"""
}
}
like_clientid{
desc {
en: """Fuzzy search by clientid"""
zh: """Client ID 模糊搜索"""
} }
} }

View File

@ -194,8 +194,7 @@ parse_qstring(Qs) ->
[ [
<<"page">>, <<"page">>,
<<"limit">>, <<"limit">>,
<<"like_username">>, <<"like_user_id">>,
<<"like_clientid">>,
<<"is_superuser">> <<"is_superuser">>
], ],
Qs Qs
@ -379,26 +378,16 @@ params_paging_in_qs() ->
params_fuzzy_in_qs() -> params_fuzzy_in_qs() ->
[ [
{like_username, {like_user_id,
mk( mk(
binary(), binary(),
#{ #{
in => query, in => query,
required => false, required => false,
desc => ?DESC(like_username), desc => ?DESC(like_user_id),
example => <<"username">> example => <<"username">>
} }
)}, )},
{like_clientid,
mk(
binary(),
#{
in => query,
required => false,
desc => ?DESC(like_clientid),
example => <<"clientid">>
}
)},
{is_superuser, {is_superuser,
mk( mk(
boolean(), boolean(),

View File

@ -491,7 +491,7 @@ t_authn_fuzzy_search(_) ->
} }
], ],
FuzzyDatas = [[{<<"like_username">>, <<"test">>}], [{<<"is_superuser">>, <<"true">>}]], FuzzyDatas = [[{<<"like_user_id">>, <<"test">>}], [{<<"is_superuser">>, <<"true">>}]],
lists:foreach(Create, UserDatas), lists:foreach(Create, UserDatas),
lists:foreach(Checker, lists:zip(UserDatas, FuzzyDatas)), lists:foreach(Checker, lists:zip(UserDatas, FuzzyDatas)),