Merge pull request #11686 from lafirest/fix/sso_user_backend

fix: fix update SSO user && improve SSO user deletion commnad
This commit is contained in:
lafirest 2023-09-26 16:04:51 +08:00 committed by GitHub
commit 8cc626d33f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 17 deletions

View File

@ -24,6 +24,7 @@
-define(ROLE_SUPERUSER, <<"administrator">>). -define(ROLE_SUPERUSER, <<"administrator">>).
-define(ROLE_DEFAULT, ?ROLE_SUPERUSER). -define(ROLE_DEFAULT, ?ROLE_SUPERUSER).
-define(BACKEND_LOCAL, local).
-define(SSO_USERNAME(Backend, Name), {Backend, Name}). -define(SSO_USERNAME(Backend, Name), {Backend, Name}).
-type dashboard_sso_backend() :: atom(). -type dashboard_sso_backend() :: atom().

View File

@ -230,7 +230,7 @@ remove_user(Username) ->
-spec update_user(dashboard_username(), dashboard_user_role(), binary()) -> -spec update_user(dashboard_username(), dashboard_user_role(), binary()) ->
{ok, map()} | {error, term()}. {ok, map()} | {error, term()}.
update_user(Username, Role, Desc) when is_binary(Username) -> update_user(Username, Role, Desc) ->
case legal_role(Role) of case legal_role(Role) of
ok -> ok ->
case case
@ -427,7 +427,7 @@ flatten_username(#{username := ?SSO_USERNAME(Backend, Name)} = Data) ->
backend => Backend backend => Backend
}; };
flatten_username(#{username := Username} = Data) when is_binary(Username) -> flatten_username(#{username := Username} = Data) when is_binary(Username) ->
Data#{backend => local}. Data#{backend => ?BACKEND_LOCAL}.
-spec add_sso_user(dashboard_sso_backend(), binary(), dashboard_user_role(), binary()) -> -spec add_sso_user(dashboard_sso_backend(), binary(), dashboard_user_role(), binary()) ->
{ok, map()} | {error, any()}. {ok, map()} | {error, any()}.

View File

@ -379,9 +379,9 @@ sso_parameters() ->
sso_parameters(Params) -> sso_parameters(Params) ->
emqx_dashboard_sso_api:sso_parameters(Params). emqx_dashboard_sso_api:sso_parameters(Params).
username(#{bindings := #{backend := local}}, Username) -> username(#{query_string := #{<<"backend">> := ?BACKEND_LOCAL}}, Username) ->
Username; Username;
username(#{bindings := #{backend := Backend}}, Username) -> username(#{query_string := #{<<"backend">> := Backend}}, Username) ->
?SSO_USERNAME(Backend, Username); ?SSO_USERNAME(Backend, Username);
username(_Req, Username) -> username(_Req, Username) ->
Username. Username.

View File

@ -191,7 +191,7 @@ token_ttl() ->
format(Token, ?SSO_USERNAME(Backend, Name), Role, ExpTime) -> format(Token, ?SSO_USERNAME(Backend, Name), Role, ExpTime) ->
format(Token, Backend, Name, Role, ExpTime); format(Token, Backend, Name, Role, ExpTime);
format(Token, Username, Role, ExpTime) -> format(Token, Username, Role, ExpTime) ->
format(Token, local, Username, Role, ExpTime). format(Token, ?BACKEND_LOCAL, Username, Role, ExpTime).
format(Token, Backend, Username, Role, ExpTime) -> format(Token, Backend, Username, Role, ExpTime) ->
#?ADMIN_JWT{ #?ADMIN_JWT{

View File

@ -34,16 +34,13 @@ admins(["passwd", Username, Password]) ->
print_error(Reason) print_error(Reason)
end; end;
admins(["del", Username]) -> admins(["del", Username]) ->
case emqx_dashboard_admin:remove_user(bin(Username)) of delete_user(bin(Username));
{ok, _} -> admins(["del", Username, BackendName]) ->
emqx_ctl:print("ok~n"); case atom(BackendName) of
{error, Reason} -> {ok, ?BACKEND_LOCAL} ->
print_error(Reason) delete_user(bin(Username));
end; {ok, Backend} ->
admins(["del", Username, Backend]) -> delete_user(?SSO_USERNAME(Backend, bin(Username)));
case emqx_dashboard_admin:remove_user(?SSO_USERNAME(atom(Backend), bin(Username))) of
{ok, _} ->
emqx_ctl:print("ok~n");
{error, Reason} -> {error, Reason} ->
print_error(Reason) print_error(Reason)
end; end;
@ -52,9 +49,18 @@ admins(_) ->
[ [
{"admins add <Username> <Password> <Description> <Role>", "Add dashboard user"}, {"admins add <Username> <Password> <Description> <Role>", "Add dashboard user"},
{"admins passwd <Username> <Password>", "Reset dashboard user password"}, {"admins passwd <Username> <Password>", "Reset dashboard user password"},
{"admins del <Username> <Backend>", "Delete dashboard user"} {"admins del <Username> <Backend>",
"Delete dashboard user, <Backend> can be omitted, the default value is 'local'"}
] ]
). ).
atom(S) -> atom(S) ->
erlang:list_to_atom(S). emqx_utils:safe_to_existing_atom(S).
delete_user(Username) ->
case emqx_dashboard_admin:remove_user(Username) of
{ok, _} ->
emqx_ctl:print("ok~n");
{error, Reason} ->
print_error(Reason)
end.