diff options
| author | Ayanda Dube <ayanda.dube@erlang-solutions.com> | 2015-09-08 14:41:58 +0100 |
|---|---|---|
| committer | Ayanda Dube <ayanda.dube@erlang-solutions.com> | 2015-10-07 08:46:40 +0100 |
| commit | 4418d46470344a36312c44ed1c6a680d89b15456 (patch) | |
| tree | 0020f46173292dff87ee0329e460c1d475028cde | |
| parent | 58733568bac91c141911a12c03c653c7d27ce2d0 (diff) | |
| download | rabbitmq-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.erl | 45 |
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(), |
