summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAyanda Dube <ayanda.dube@erlang-solutions.com>2015-09-08 14:41:58 +0100
committerAyanda Dube <ayanda.dube@erlang-solutions.com>2015-10-07 08:46:40 +0100
commit4418d46470344a36312c44ed1c6a680d89b15456 (patch)
tree0020f46173292dff87ee0329e460c1d475028cde
parent58733568bac91c141911a12c03c653c7d27ce2d0 (diff)
downloadrabbitmq-server-git-4418d46470344a36312c44ed1c6a680d89b15456.tar.gz
Adds list_users/2 for dynamic listing of users.
Adds list_user_permissions/3 for dynamic listing of user permissions. Adds list_vhost_permissions/3 for dynamic listing of vhost permissions. References #62
-rw-r--r--src/rabbit_auth_backend_internal.erl45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/rabbit_auth_backend_internal.erl b/src/rabbit_auth_backend_internal.erl
index 6babe135fa..713ec1e6c9 100644
--- a/src/rabbit_auth_backend_internal.erl
+++ b/src/rabbit_auth_backend_internal.erl
@@ -30,8 +30,9 @@
-export([user_info_keys/0, perms_info_keys/0,
user_perms_info_keys/0, vhost_perms_info_keys/0,
user_vhost_perms_info_keys/0,
- list_users/0, list_permissions/0,
- list_user_permissions/1, list_vhost_permissions/1,
+ list_users/0, list_users/2, list_permissions/0,
+ list_user_permissions/1, list_user_permissions/3,
+ list_vhost_permissions/1, list_vhost_permissions/3,
list_user_vhost_permissions/2]).
%% for testing
@@ -66,11 +67,16 @@
-spec(vhost_perms_info_keys/0 :: () -> rabbit_types:info_keys()).
-spec(user_vhost_perms_info_keys/0 :: () -> rabbit_types:info_keys()).
-spec(list_users/0 :: () -> [rabbit_types:infos()]).
+-spec(list_users/2 :: (reference(), pid()) -> 'ok').
-spec(list_permissions/0 :: () -> [rabbit_types:infos()]).
-spec(list_user_permissions/1 ::
(rabbit_types:username()) -> [rabbit_types:infos()]).
+-spec(list_user_permissions/3 ::
+ (rabbit_types:username(), reference(), pid()) -> 'ok').
-spec(list_vhost_permissions/1 ::
(rabbit_types:vhost()) -> [rabbit_types:infos()]).
+-spec(list_vhost_permissions/3 ::
+ (rabbit_types:vhost(), reference(), pid()) -> 'ok').
-spec(list_user_vhost_permissions/2 ::
(rabbit_types:username(), rabbit_types:vhost())
-> [rabbit_types:infos()]).
@@ -309,6 +315,13 @@ list_users() ->
#internal_user{username = Username, tags = Tags} <-
mnesia:dirty_match_object(rabbit_user, #internal_user{_ = '_'})].
+list_users(Ref, Pid) ->
+ [Pid ! {Ref, [{user, Username}, {tags, Tags}]} ||
+ #internal_user{username = Username, tags = Tags} <-
+ mnesia:dirty_match_object(rabbit_user, #internal_user{_ = '_'})],
+ Pid ! {Ref, finished},
+ ok.
+
list_permissions() ->
list_permissions(perms_info_keys(), match_user_vhost('_', '_')).
@@ -326,6 +339,24 @@ list_permissions(Keys, QueryThunk) ->
%% TODO: use dirty ops instead
rabbit_misc:execute_mnesia_transaction(QueryThunk)].
+list_permissions(Keys, QueryThunk, Ref, Pid) ->
+ [Pid ! {Ref, filter_props(Keys, [{user, Username},
+ {vhost, VHostPath},
+ {configure, ConfigurePerm},
+ {write, WritePerm},
+ {read, ReadPerm}])} ||
+ #user_permission{user_vhost =
+ #user_vhost{username = Username,
+ virtual_host = VHostPath},
+ permission = #permission{
+ configure = ConfigurePerm,
+ write = WritePerm,
+ read = ReadPerm}} <-
+ %% TODO: use dirty ops instead
+ rabbit_misc:execute_mnesia_transaction(QueryThunk)],
+ Pid ! {Ref, finished},
+ ok.
+
filter_props(Keys, Props) -> [T || T = {K, _} <- Props, lists:member(K, Keys)].
list_user_permissions(Username) ->
@@ -333,11 +364,21 @@ list_user_permissions(Username) ->
user_perms_info_keys(),
rabbit_misc:with_user(Username, match_user_vhost(Username, '_'))).
+list_user_permissions(Username, Ref, Pid) ->
+ list_permissions(
+ user_perms_info_keys(),
+ rabbit_misc:with_user(Username, match_user_vhost(Username, '_')), Ref, Pid).
+
list_vhost_permissions(VHostPath) ->
list_permissions(
vhost_perms_info_keys(),
rabbit_vhost:with(VHostPath, match_user_vhost('_', VHostPath))).
+list_vhost_permissions(VHostPath, Ref, Pid) ->
+ list_permissions(
+ vhost_perms_info_keys(),
+ rabbit_vhost:with(VHostPath, match_user_vhost('_', VHostPath)), Ref, Pid).
+
list_user_vhost_permissions(Username, VHostPath) ->
list_permissions(
user_vhost_perms_info_keys(),