summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Collet <rco@openerp.com>2012-08-29 15:37:32 +0200
committerRaphael Collet <rco@openerp.com>2012-08-29 15:37:32 +0200
commit3b2423c5dae204fa262d41dff4f40c35accc6d1e (patch)
tree5148e7b482d947eee94f18ec7bbf7f085f8cc8ab
parent750165e94df6a0679d05b739ac18e420c6845696 (diff)
[IMP] ir.ui.view: filter inheriting views based on groups
bzr revid: rco@openerp.com-20120829133732-ijyy3y05mlbazgya
-rw-r--r--openerp/addons/base/ir/ir_ui_view.py11
1 files 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)):