)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3181e7210eb06cf30fe9c142ca319a57d855f3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b02a54d9_0207699c","updated":"2026-04-10 04:26:19.000000000","message":"New change pushed, should handle write-only users correctly, and address your other comments.","commit_id":"6bd33a4b5c16134e4566a4bd00cea7c9cf4a3518"},{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"988bce4b0abe722d42c8d17e48ad25f1a24ad096","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b7199b5f_c3f5435c","updated":"2026-04-13 21:17:38.000000000","message":"check approval","commit_id":"cd054f545a93ad60b0bea570c64bcd8130f68fd6"},{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"9232dace2dac50d7462d2620f5894d314a2d0502","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fe2e7f1b_25e452ba","updated":"2026-04-13 21:15:44.000000000","message":"check permissions","commit_id":"cd054f545a93ad60b0bea570c64bcd8130f68fd6"}],"query-ui/angular-components/documents/qw.documents.component.js":[{"author":{"_account_id":1005387,"name":"Piotr Najda ","email":"piotr.najda@couchbase.com","username":"piotrnajda3000","avatars":[{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b17bdabd5e0c1ea413735659dfbfb563c0242dd9","unresolved":true,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"      const fullName \u003d `${dec.options.selected_bucket}:${dec.options.selected_scope}:${dec.options.selected_collection}`;"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"      return (this.rbac.cluster.collection[fullName]?.data.docs.upsert ||"},{"line_number":209,"context_line":"        this.rbac.cluster.bucket[this.options.selected_bucket].data.docs.upsert);"},{"line_number":210,"context_line":"    };"},{"line_number":211,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"bb0a0cac_9e1b9c77","line":208,"updated":"2026-04-09 11:36:29.000000000","message":"Should we extend the optional chaining down to data.docs, too? I.e. `?.data?.docs?.upsert`, or is there no risk related to this?","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1005387,"name":"Piotr Najda ","email":"piotr.najda@couchbase.com","username":"piotrnajda3000","avatars":[{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d04d1b5077932d9d215b48b1fc9b2d62b239af3","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"      const fullName \u003d `${dec.options.selected_bucket}:${dec.options.selected_scope}:${dec.options.selected_collection}`;"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"      return (this.rbac.cluster.collection[fullName]?.data.docs.upsert ||"},{"line_number":209,"context_line":"        this.rbac.cluster.bucket[this.options.selected_bucket].data.docs.upsert);"},{"line_number":210,"context_line":"    };"},{"line_number":211,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"a12272cf_e976182c","line":208,"in_reply_to":"23fc6434_1dced82b","updated":"2026-04-13 13:58:40.000000000","message":"Done","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3181e7210eb06cf30fe9c142ca319a57d855f3c","unresolved":true,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"      const fullName \u003d `${dec.options.selected_bucket}:${dec.options.selected_scope}:${dec.options.selected_collection}`;"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"      return (this.rbac.cluster.collection[fullName]?.data.docs.upsert ||"},{"line_number":209,"context_line":"        this.rbac.cluster.bucket[this.options.selected_bucket].data.docs.upsert);"},{"line_number":210,"context_line":"    };"},{"line_number":211,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"23fc6434_1dced82b","line":208,"in_reply_to":"bb0a0cac_9e1b9c77","updated":"2026-04-10 04:26:19.000000000","message":"It *should* be safe. As of this change, there is only one place in the code where `cluster.collection[fullname]` permissions are retrieved, and `data.docs.upsert` is fetched. But things might change in the future, so it\u0027s safer to do optional chaining.","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1005387,"name":"Piotr Najda ","email":"piotr.najda@couchbase.com","username":"piotrnajda3000","avatars":[{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b17bdabd5e0c1ea413735659dfbfb563c0242dd9","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        return KV;"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"      // N1QL is not available if the user lacks n1ql.select permissions on the current collection"},{"line_number":305,"context_line":"      if (dec.rbac.cluster.collection[`${dec.options.selected_bucket}:${dec.options.selected_scope}:${dec.options.selected_collection}`]?.n1ql.select.execute \u003d\u003d\u003d false)"},{"line_number":306,"context_line":"        return KV;"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"      // key range lookup or limit/offset with no WHERE clause"}],"source_content_type":"text/javascript","patch_set":1,"id":"579545f1_ccf6dd5e","line":305,"updated":"2026-04-09 11:36:29.000000000","message":"Here we check `\u003d\u003d\u003d false`, below we check `!\u003d\u003d true` - do we want to replace this with `!\u003d\u003d true` to guard against `undefined`?","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3181e7210eb06cf30fe9c142ca319a57d855f3c","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        return KV;"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"      // N1QL is not available if the user lacks n1ql.select permissions on the current collection"},{"line_number":305,"context_line":"      if (dec.rbac.cluster.collection[`${dec.options.selected_bucket}:${dec.options.selected_scope}:${dec.options.selected_collection}`]?.n1ql.select.execute \u003d\u003d\u003d false)"},{"line_number":306,"context_line":"        return KV;"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"      // key range lookup or limit/offset with no WHERE clause"}],"source_content_type":"text/javascript","patch_set":1,"id":"50fc1c84_7d505ffe","line":305,"in_reply_to":"579545f1_ccf6dd5e","updated":"2026-04-10 04:26:19.000000000","message":"Acknowledged","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"}],"query-ui/angular-services/qw.metadata.service.js":[{"author":{"_account_id":1005387,"name":"Piotr Najda ","email":"piotr.najda@couchbase.com","username":"piotrnajda3000","avatars":[{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b17bdabd5e0c1ea413735659dfbfb563c0242dd9","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        ];"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        // do we need to get the permissions?"},{"line_number":86,"context_line":"        if (!this.rbac.cluster.collection[fullName]?.data?.docs.read ||"},{"line_number":87,"context_line":"          !this.rbac.cluster.collection[fullName]?.data?.docs.upsert ||"},{"line_number":88,"context_line":"          !this.rbac.cluster.collection[fullName]?.n1ql?.select.execute) {"},{"line_number":89,"context_line":"            return this.qwHttp.post(\u0027/pools/default/checkPermissions\u0027,perms.join(\u0027,\u0027))"}],"source_content_type":"text/javascript","patch_set":1,"id":"ba16c498_90db6f8e","line":86,"updated":"2026-04-09 11:36:29.000000000","message":"Should we add the delete case here, too?","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3181e7210eb06cf30fe9c142ca319a57d855f3c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        ];"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        // do we need to get the permissions?"},{"line_number":86,"context_line":"        if (!this.rbac.cluster.collection[fullName]?.data?.docs.read ||"},{"line_number":87,"context_line":"          !this.rbac.cluster.collection[fullName]?.data?.docs.upsert ||"},{"line_number":88,"context_line":"          !this.rbac.cluster.collection[fullName]?.n1ql?.select.execute) {"},{"line_number":89,"context_line":"            return this.qwHttp.post(\u0027/pools/default/checkPermissions\u0027,perms.join(\u0027,\u0027))"}],"source_content_type":"text/javascript","patch_set":1,"id":"5d72a623_e3051575","line":86,"in_reply_to":"ba16c498_90db6f8e","updated":"2026-04-10 04:26:19.000000000","message":"Acknowledged","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1005387,"name":"Piotr Najda ","email":"piotr.najda@couchbase.com","username":"piotrnajda3000","avatars":[{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f00c8cdf07ae5b606df820e7a18a278e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b17bdabd5e0c1ea413735659dfbfb563c0242dd9","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        // do we need to get the permissions?"},{"line_number":86,"context_line":"        if (!this.rbac.cluster.collection[fullName]?.data?.docs.read ||"},{"line_number":87,"context_line":"          !this.rbac.cluster.collection[fullName]?.data?.docs.upsert ||"},{"line_number":88,"context_line":"          !this.rbac.cluster.collection[fullName]?.n1ql?.select.execute) {"},{"line_number":89,"context_line":"            return this.qwHttp.post(\u0027/pools/default/checkPermissions\u0027,perms.join(\u0027,\u0027))"},{"line_number":90,"context_line":"              .then(result \u003d\u003e {"}],"source_content_type":"text/javascript","patch_set":1,"id":"dd981e05_07406b01","line":87,"updated":"2026-04-09 11:36:29.000000000","message":"The calls will repeat if permission is `false`. Should be we checking against `undefined` instead?","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"},{"author":{"_account_id":1002967,"name":"Eben Haber","email":"eben@couchbase.com","username":"eben","avatars":[{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/92670d3eb689624a33ac6c2860cd609c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3181e7210eb06cf30fe9c142ca319a57d855f3c","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        // do we need to get the permissions?"},{"line_number":86,"context_line":"        if (!this.rbac.cluster.collection[fullName]?.data?.docs.read ||"},{"line_number":87,"context_line":"          !this.rbac.cluster.collection[fullName]?.data?.docs.upsert ||"},{"line_number":88,"context_line":"          !this.rbac.cluster.collection[fullName]?.n1ql?.select.execute) {"},{"line_number":89,"context_line":"            return this.qwHttp.post(\u0027/pools/default/checkPermissions\u0027,perms.join(\u0027,\u0027))"},{"line_number":90,"context_line":"              .then(result \u003d\u003e {"}],"source_content_type":"text/javascript","patch_set":1,"id":"8de46d28_003dc831","line":87,"in_reply_to":"dd981e05_07406b01","updated":"2026-04-10 04:26:19.000000000","message":"Acknowledged","commit_id":"d1ccbcab8ed20059df4b4db1dc02eb8a180218bc"}]}
