summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2011-05-31 13:36:23 +0100
committerEmile Joubert <emile@rabbitmq.com>2011-05-31 13:36:23 +0100
commit61556c2e11c617e0f0067d1aba064cbbd5c16489 (patch)
tree01888fc112f06102aa472992f6a9de8a63018873 /src
parent7f4bd7efc40349e99cd3f3f0906dd3d9f921b07e (diff)
downloadrabbitmq-server-git-61556c2e11c617e0f0067d1aba064cbbd5c16489.tar.gz
List permissions differently
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_auth_backend_internal.erl10
-rw-r--r--src/rabbit_control.erl50
2 files changed, 33 insertions, 27 deletions
diff --git a/src/rabbit_auth_backend_internal.erl b/src/rabbit_auth_backend_internal.erl
index f70813d1e7..7cbd5dca0c 100644
--- a/src/rabbit_auth_backend_internal.erl
+++ b/src/rabbit_auth_backend_internal.erl
@@ -28,7 +28,7 @@
hash_password/1]).
-export([set_permissions/5, clear_permissions/2,
list_permissions/0, list_vhost_permissions/1, list_user_permissions/1,
- list_user_vhost_permissions/2]).
+ list_user_vhost_permissions/2, vhost_perms_info_keys/0]).
-include("rabbit_auth_backend_spec.hrl").
@@ -70,11 +70,14 @@
-spec(list_user_vhost_permissions/2 ::
(rabbit_types:username(), rabbit_types:vhost())
-> [{regexp(), regexp(), regexp()}]).
+-spec(vhost_perms_info_keys/0 :: () -> rabbit_types:info_keys()).
-endif.
%%----------------------------------------------------------------------------
+-define(PERMS_INFO_KEYS, [configure_perms, write_perms, read_perms]).
+
%% Implementation of rabbit_auth_backend
description() ->
@@ -283,13 +286,16 @@ clear_permissions(Username, VHostPath) ->
virtual_host = VHostPath}})
end)).
+vhost_perms_info_keys() -> [username] ++ ?PERMS_INFO_KEYS.
+
list_permissions() ->
[{Username, VHostPath, ConfigurePerm, WritePerm, ReadPerm} ||
{Username, VHostPath, ConfigurePerm, WritePerm, ReadPerm} <-
list_permissions(match_user_vhost('_', '_'))].
list_vhost_permissions(VHostPath) ->
- [{Username, ConfigurePerm, WritePerm, ReadPerm} ||
+ InfoKeys = vhost_perms_info_keys(),
+ [lists:zip(InfoKeys, [Username, ConfigurePerm, WritePerm, ReadPerm]) ||
{Username, _, ConfigurePerm, WritePerm, ReadPerm} <-
list_permissions(rabbit_vhost:with(
VHostPath, match_user_vhost('_', VHostPath)))].
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index a2a054b46c..7d3f79076b 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -96,6 +96,18 @@ start() ->
fmt_stderr(Format, Args) -> rabbit_misc:format_stderr(Format ++ "~n", Args).
+print_report(Node, {Descr, Module, InfoFun, KeysFun}) ->
+ print_report(Node, {Descr, Module, InfoFun, KeysFun}, []).
+
+print_report(Node, {Descr, Module, InfoFun, KeysFun}, VHostArg) ->
+ io:format("%% ~p~n", [[Descr] ++ VHostArg]),
+ case Results = rpc_call(Node, Module, InfoFun, VHostArg) of
+ [_|_] -> InfoItems = rpc_call(Node, Module, KeysFun, []),
+ display_row([atom_to_list(I) || I <- InfoItems]),
+ display_info_list(Results, InfoItems);
+ _ -> ok
+ end.
+
print_error(Format, Args) -> fmt_stderr("Error: " ++ Format, Args).
print_badrpc_diagnostics(Node) ->
@@ -302,39 +314,27 @@ action(clear_permissions, Node, [Username], Opts, Inform) ->
action(list_permissions, Node, [], Opts, Inform) ->
VHost = proplists:get_value(?VHOST_OPT, Opts),
Inform("Listing permissions in vhost ~p", [VHost]),
- display_list(call(Node, {rabbit_auth_backend_internal,
- list_vhost_permissions, [VHost]}));
+ display_info_list(call(Node, {rabbit_auth_backend_internal,
+ list_vhost_permissions, [VHost]}),
+ rabbit_auth_backend_internal:vhost_perms_info_keys());
action(report, Node, _Args, _Opts, Inform) ->
io:format("Reporting server status on ~p~n", [erlang:universaltime()]),
[action(status, ClusterNode, [], [], Inform) ||
ClusterNode <- rpc_call(Node, rabbit_mnesia, running_clustered_nodes, [])],
- Report = fun ({Descr, Module, InfoFun, KeysFun, VHostArg}) ->
- io:format("%% ~p~n", [[Descr] ++ VHostArg]),
- case Results = rpc_call(Node, Module, InfoFun, VHostArg) of
- [_|_] -> InfoItems = rpc_call(Node, Module, KeysFun, []),
- display_row([atom_to_list(I) || I <- InfoItems]),
- display_info_list(Results, InfoItems);
- _ -> ok
- end
- end,
GlobalQueries = [{"connections", rabbit_networking, connection_info_all,
- connection_info_keys, []},
- {"channels", rabbit_channel, info_all, info_keys, []}],
- VHostQueries = [{"queues", rabbit_amqqueue, info_all, info_keys, []},
- {"exchanges", rabbit_exchange, info_all, info_keys, []},
- {"bindings", rabbit_binding, info_all, info_keys, []},
+ connection_info_keys},
+ {"channels", rabbit_channel, info_all, info_keys}],
+ VHostQueries = [{"queues", rabbit_amqqueue, info_all, info_keys},
+ {"exchanges", rabbit_exchange, info_all, info_keys},
+ {"bindings", rabbit_binding, info_all, info_keys},
{"consumers", rabbit_amqqueue, consumers_all,
- consumer_info_keys, []}],
+ consumer_info_keys},
+ {"permissions", rabbit_auth_backend_internal,
+ list_vhost_permissions, vhost_perms_info_keys}],
VHosts = rpc_call(Node, rabbit_vhost, list, []),
- [Report(Q) || Q <- GlobalQueries],
- [Report(setelement(5, Q, [V])) || Q <- VHostQueries, V <- VHosts],
- [begin
- io:format("%% ~p~n", [["permissions" | [VHost]]]),
- display_list(call(Node,
- {rabbit_auth_backend_internal, list_vhost_permissions,
- [binary_to_list(VHost)]}))
- end || VHost <- VHosts],
+ [print_report(Node, Q) || Q <- GlobalQueries],
+ [print_report(Node, Q, [V]) || Q <- VHostQueries, V <- VHosts],
io:format("End of server status report~n"),
ok.