From 162ad1c0f1097df069cf0c2dead4e6886fde5bc8 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 26 Mar 2014 12:30:36 +0100 Subject: [PATCH] [FIX] web: on record reload (form & list view), use search_read instead of read, to check if the user can still read the record (security rules) bzr revid: dle@openerp.com-20140326113036-g9yv3jj6yetwxvg8 --- addons/web/static/src/js/view_form.js | 10 ++++++++-- addons/web/static/src/js/view_list.js | 9 +++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index edb44e7ea06..812da9a7219 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -951,14 +951,20 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } else { var fields = _.keys(self.fields_view.fields); fields.push('display_name'); - return self.dataset.read_index(fields, + // Use of search_read instead of read to check if we can still read the record (security rules) + return self.dataset.call('search_read', [[['id', '=', self.dataset.ids[self.dataset.index]]], fields], { context: { 'bin_size': true, 'future_display_name': true } }).then(function(r) { - self.trigger('load_record', r); + if (_.isEmpty(r)){ + self.do_action('history_back'); + } + else{ + self.trigger('load_record', r[0]); + } }); } }); diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 6de354bfcb8..775c90555c1 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -528,13 +528,14 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi }, reload_record: function (record) { var self = this; - return this.dataset.read_ids( - [record.get('id')], + // Use of search_read instead of read to check if we can still read the record (security rules) + return this.dataset.call('search_read', [ + [['id', '=', record.get('id')]], _.pluck(_(this.columns).filter(function (r) { return r.tag === 'field'; - }), 'name') + }), 'name')] ).done(function (records) { - var values = records[0]; + var values = _.isEmpty(records) ? undefined : records[0]; if (!values) { self.records.remove(record); return;