Просмотр исходного кода

Merge pull request #11686 from lafirest/fix/sso_user_backend

fix: fix update SSO user && improve SSO user deletion commnad
lafirest 2 лет назад
Родитель
Сommit
8cc626d33f

+ 1 - 0
apps/emqx_dashboard/include/emqx_dashboard.hrl

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

+ 2 - 2
apps/emqx_dashboard/src/emqx_dashboard_admin.erl

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

+ 2 - 2
apps/emqx_dashboard/src/emqx_dashboard_api.erl

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

+ 1 - 1
apps/emqx_dashboard/src/emqx_dashboard_token.erl

@@ -191,7 +191,7 @@ token_ttl() ->
 format(Token, ?SSO_USERNAME(Backend, Name), Role, ExpTime) ->
     format(Token, Backend, Name, 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) ->
     #?ADMIN_JWT{

+ 18 - 12
apps/emqx_dashboard_sso/src/emqx_dashboard_sso_cli.erl

@@ -34,16 +34,13 @@ admins(["passwd", Username, Password]) ->
             print_error(Reason)
     end;
 admins(["del", Username]) ->
-    case emqx_dashboard_admin:remove_user(bin(Username)) of
-        {ok, _} ->
-            emqx_ctl:print("ok~n");
-        {error, Reason} ->
-            print_error(Reason)
-    end;
-admins(["del", Username, Backend]) ->
-    case emqx_dashboard_admin:remove_user(?SSO_USERNAME(atom(Backend), bin(Username))) of
-        {ok, _} ->
-            emqx_ctl:print("ok~n");
+    delete_user(bin(Username));
+admins(["del", Username, BackendName]) ->
+    case atom(BackendName) of
+        {ok, ?BACKEND_LOCAL} ->
+            delete_user(bin(Username));
+        {ok, Backend} ->
+            delete_user(?SSO_USERNAME(Backend, bin(Username)));
         {error, Reason} ->
             print_error(Reason)
     end;
@@ -52,9 +49,18 @@ admins(_) ->
         [
             {"admins add <Username> <Password> <Description> <Role>", "Add dashboard user"},
             {"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) ->
-    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.