summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lehnardt <jan@apache.org>2020-07-26 20:01:06 +0200
committerJan Lehnardt <jan@apache.org>2020-07-26 20:09:36 +0200
commit92d1c4399ebb4bd1a9c64b9919f6cbe752b50bd0 (patch)
tree320fa0fb16474d1eeadc579d00fc0627ebfc6cad
parentdf3b76f144de843ca71ba516c4edcfa563335bec (diff)
downloadcouchdb-92d1c4399ebb4bd1a9c64b9919f6cbe752b50bd0.tar.gz
feat(access): _users users now have a default _users role
-rw-r--r--src/couch/src/couch_httpd_auth.erl13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/couch/src/couch_httpd_auth.erl b/src/couch/src/couch_httpd_auth.erl
index 45a82bd0f..cc6715e97 100644
--- a/src/couch/src/couch_httpd_auth.erl
+++ b/src/couch/src/couch_httpd_auth.erl
@@ -87,6 +87,13 @@ basic_name_pw(Req) ->
nil
end.
+extract_roles(UserProps) ->
+ Roles = couch_util:get_value(<<"roles">>, UserProps, []),
+ case lists:member(<<"_admin">>, Roles) of
+ true -> Roles;
+ _ -> Roles ++ [<<"_users">>]
+ end.
+
default_authentication_handler(Req) ->
default_authentication_handler(Req, couch_auth_cache).
@@ -104,7 +111,7 @@ default_authentication_handler(Req, AuthModule) ->
true ->
Req#httpd{user_ctx=#user_ctx{
name=UserName,
- roles=couch_util:get_value(<<"roles">>, UserProps, [])
+ roles=extract_roles(UserProps)
}};
false ->
authentication_warning(Req, UserName),
@@ -167,7 +174,7 @@ proxy_auth_user(Req) ->
Roles = case header_value(Req, XHeaderRoles) of
undefined -> [];
Else ->
- [?l2b(R) || R <- string:tokens(Else, ",")]
+ [?l2b(R) || R <- string:tokens(Else, ",")] ++ [<<"_users">>]
end,
case config:get("couch_httpd_auth", "proxy_use_secret", "false") of
"true" ->
@@ -269,7 +276,7 @@ cookie_authentication_handler(#httpd{mochi_req=MochiReq}=Req, AuthModule) ->
[User]),
Req#httpd{user_ctx=#user_ctx{
name=?l2b(User),
- roles=couch_util:get_value(<<"roles">>, UserProps, [])
+ roles=extract_roles(UserProps)
}, auth={FullSecret, TimeLeft < Timeout*0.9}};
_Else ->
Req