From 004a1a64ee3e0ba79cf8460df13799e27f282365 Mon Sep 17 00:00:00 2001 From: "Divyesh Makwana (Open ERP)" Date: Wed, 29 Aug 2012 11:23:33 +0530 Subject: [PATCH 1/2] [ADD] Added 'groups_id' field into 'ir_ui_view' model. bzr revid: mdi@tinyerp.com-20120829055333-6iw12tthxeidkkus --- openerp/addons/base/ir/ir.xml | 11 +++++++++-- openerp/addons/base/ir/ir_ui_view.py | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index 49bb719bad7..9cfb4c3b8bf 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -599,8 +599,15 @@ - - + + + + + + + + + diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index b2805884f18..7b8165ec694 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -63,6 +63,9 @@ class view(osv.osv): 'name': fields.char('View Name',size=64, required=True), 'model': fields.char('Object', size=64, required=True, select=True), 'priority': fields.integer('Sequence', required=True), + 'groups_id': fields.many2many('res.groups', 'ir_ui_view_group_rel', + 'view_id', 'group_id', 'Groups', help="If you have groups, the visibility of this view will be based on these groups. "\ + "If this field is empty, OpenERP will compute visibility based on the related object's read access."), 'type': fields.function(_type_field, type='selection', selection=[ ('tree','Tree'), ('form','Form'), From 3b2423c5dae204fa262d41dff4f40c35accc6d1e Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 29 Aug 2012 15:37:32 +0200 Subject: [PATCH 2/2] [IMP] ir.ui.view: filter inheriting views based on groups bzr revid: rco@openerp.com-20120829133732-ijyy3y05mlbazgya --- openerp/addons/base/ir/ir_ui_view.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index 3caacfc1494..bad2c3d85af 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -169,20 +169,25 @@ class view(osv.osv): :rtype: list of tuples :return: [(view_arch,view_id), ...] """ + user_groups = frozenset(self.pool.get('res.users').browse(cr, 1, uid, context).groups_id) if self.pool._init: # Module init currently in progress, only consider views from modules whose code was already loaded - query = """SELECT v.arch, v.id FROM ir_ui_view v LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id) + query = """SELECT v.id FROM ir_ui_view v LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id) WHERE v.inherit_id=%s AND v.model=%s AND md.module in %s ORDER BY priority""" query_params = (view_id, model, tuple(self.pool._init_modules)) else: # Modules fully loaded, consider all views - query = """SELECT v.arch, v.id FROM ir_ui_view v + query = """SELECT v.id FROM ir_ui_view v WHERE v.inherit_id=%s AND v.model=%s ORDER BY priority""" query_params = (view_id, model) cr.execute(query, query_params) - return cr.fetchall() + view_ids = [v[0] for v in cr.fetchall()] + # filter views based on user groups + return [(view.arch, view.id) + for view in self.browse(cr, 1, view_ids, context) + if not (view.groups_id and user_groups.isdisjoint(view.groups_id))] def write(self, cr, uid, ids, vals, context=None): if not isinstance(ids, (list, tuple)):