Skip to content

Commit ffb5dd4

Browse files
Check user or admin/monitor for user-limits
1 parent fe34396 commit ffb5dd4

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

deps/rabbitmq_management/src/rabbit_mgmt_wm_user_limits.erl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ allowed_methods(ReqData, Context) ->
2424
{[<<"GET">>, <<"OPTIONS">>], ReqData, Context}.
2525

2626
is_authorized(ReqData, Context) ->
27-
rabbit_mgmt_util:is_authorized_vhost_visible(ReqData, Context).
27+
case user(ReqData) of
28+
none ->
29+
%% listing all users' limits is an administrator-only operation
30+
rabbit_mgmt_util:is_authorized_admin(ReqData, Context);
31+
Username ->
32+
%% reading a specific user's limits: administrator/monitor or own account
33+
rabbit_mgmt_util:is_authorized_user(ReqData, Context, [{user, Username}])
34+
end.
2835

2936
content_types_provided(ReqData, Context) ->
3037
{[{<<"application/json">>, to_json}], ReqData, Context}.

deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4084,7 +4084,17 @@ user_limits_list_test(Config) ->
40844084
},
40854085
rabbit_ct_broker_helpers:set_user_limits(Config, 0, NoVhostUser, maps:get(value, Limits4)),
40864086

4087-
?assertEqual([Limits4], http_get(Config, "/user-limits/no_vhost_user", ?OK)).
4087+
?assertEqual([Limits4], http_get(Config, "/user-limits/no_vhost_user", ?OK)),
4088+
4089+
%% A management-only user must not be able to enumerate other users' limits.
4090+
%% Reading own limits is allowed; reading another user's limits or the full
4091+
%% list must be refused.
4092+
http_get(Config, "/user-limits", User1, User1, ?NOT_AUTHORISED),
4093+
http_get(Config, "/user-limits", User2, User2, ?NOT_AUTHORISED),
4094+
Limits1 = http_get(Config, "/user-limits/" ++ binary_to_list(User1), User1, User1, ?OK),
4095+
http_get(Config, "/user-limits/" ++ binary_to_list(User2), User1, User1, ?NOT_AUTHORISED),
4096+
Limits2 = http_get(Config, "/user-limits/" ++ binary_to_list(User2), User2, User2, ?OK),
4097+
http_get(Config, "/user-limits/" ++ binary_to_list(User1), User2, User2, ?NOT_AUTHORISED).
40884098

40894099
user_limit_set_test(Config) ->
40904100
?assertEqual([], http_get(Config, "/user-limits", ?OK)),

0 commit comments

Comments
 (0)