summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lehnardt <jan@apache.org>2022-08-06 12:48:36 +0200
committerJan Lehnardt <jan@apache.org>2022-12-16 16:56:18 +0100
commit651df0a64be10bf5a3f7f4527dbd6820cbbd37b7 (patch)
treecd026c0d6ae5736c775393046feaea8c54ad8327
parent886ab2f41c18b25a3dbc45d4dfbbab99a03798dd (diff)
downloadcouchdb-651df0a64be10bf5a3f7f4527dbd6820cbbd37b7.tar.gz
feat(access): add global off switch
-rw-r--r--rel/overlay/etc/default.ini4
-rw-r--r--src/chttpd/src/chttpd_db.erl9
-rw-r--r--src/couch/test/eunit/couchdb_access_tests.erl1
3 files changed, 12 insertions, 2 deletions
diff --git a/rel/overlay/etc/default.ini b/rel/overlay/etc/default.ini
index ae691bb8d..0612506e3 100644
--- a/rel/overlay/etc/default.ini
+++ b/rel/overlay/etc/default.ini
@@ -388,6 +388,10 @@ authentication_db = _users
; max_iterations, password_scheme, password_regexp, proxy_use_secret,
; public_fields, secret, users_db_public, cookie_domain, same_site
+; Per document access settings
+[per_doc_access]
+;enabled = false
+
; CSP (Content Security Policy) Support
[csp]
;utils_enable = true
diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 29daf5674..d26824bdd 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -2006,9 +2006,14 @@ parse_shards_opt("placement", Req, Default) ->
parse_shards_opt("access", Req, Value) when is_list(Value) ->
parse_shards_opt("access", Req, list_to_existing_atom(Value));
parse_shards_opt("access", _Req, Value) when is_boolean(Value) ->
- Value;
+ case config:get_boolean("per_doc_access", "enabled", false) of
+ true -> Value;
+ false ->
+ Err = ?l2b(["The `access` is not available on this CouchDB installation."]),
+ throw({bad_request, Err})
+ end;
parse_shards_opt("access", _Req, _Value) ->
- Err = ?l2b(["The woopass `access` value should be a boolean."]),
+ Err = ?l2b(["The `access` value should be a boolean."]),
throw({bad_request, Err});
parse_shards_opt(Param, Req, Default) ->
diff --git a/src/couch/test/eunit/couchdb_access_tests.erl b/src/couch/test/eunit/couchdb_access_tests.erl
index 28f27ea72..1b656499c 100644
--- a/src/couch/test/eunit/couchdb_access_tests.erl
+++ b/src/couch/test/eunit/couchdb_access_tests.erl
@@ -46,6 +46,7 @@ before_all() ->
ok = config:set("admins", "a", binary_to_list(Hashed), _Persist=false),
ok = config:set("couchdb", "uuid", "21ac467c1bc05e9d9e9d2d850bb1108f", _Persist=false),
ok = config:set("log", "level", "debug", _Persist=false),
+ ok = config:set("per_doc_access", "enabled", "true", _Persist=false),
% cleanup and setup
{ok, _, _, _} = test_request:delete(url() ++ "/db", ?ADMIN_REQ_HEADERS),