Skip to content

Commit 1e18471

Browse files
Check user or admin/monitor for user-limits
1 parent 0c21c93 commit 1e18471

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
@@ -4125,7 +4125,17 @@ user_limits_list_test(Config) ->
41254125
},
41264126
rabbit_ct_broker_helpers:set_user_limits(Config, 0, NoVhostUser, maps:get(value, Limits4)),
41274127

4128-
?assertEqual([Limits4], http_get(Config, "/user-limits/no_vhost_user", ?OK)).
4128+
?assertEqual([Limits4], http_get(Config, "/user-limits/no_vhost_user", ?OK)),
4129+
4130+
%% A management-only user must not be able to enumerate other users' limits.
4131+
%% Reading own limits is allowed; reading another user's limits or the full
4132+
%% list must be refused.
4133+
http_get(Config, "/user-limits", User1, User1, ?NOT_AUTHORISED),
4134+
http_get(Config, "/user-limits", User2, User2, ?NOT_AUTHORISED),
4135+
Limits1 = http_get(Config, "/user-limits/" ++ binary_to_list(User1), User1, User1, ?OK),
4136+
http_get(Config, "/user-limits/" ++ binary_to_list(User2), User1, User1, ?NOT_AUTHORISED),
4137+
Limits2 = http_get(Config, "/user-limits/" ++ binary_to_list(User2), User2, User2, ?OK),
4138+
http_get(Config, "/user-limits/" ++ binary_to_list(User1), User2, User2, ?NOT_AUTHORISED).
41294139

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

0 commit comments

Comments
 (0)