Raphael Collet (OpenERP) has proposed merging
lp:~openerp-dev/openobject-server/trunk-editable_list into lp:openobject-server.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-editable_list/+merge/122664
Add groups on views. When composing a view for a model, inherited views are
discarded when their groups do not contain the current user.
--
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-editable_list/+merge/122664
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-server/trunk-editable_list.
=== modified file 'openerp/addons/base/ir/ir.xml'
--- openerp/addons/base/ir/ir.xml 2012-08-31 12:53:36 +0000
+++ openerp/addons/base/ir/ir.xml 2012-09-04 12:12:40 +0000
@@ -599,8 +599,15 @@
<field name="xml_id"/>
</group>
</group>
- <field name="arch"/>
- </sheet>
+ <notebook>
+ <page string="Architecture">
+ <field name="arch"/>
+ </page>
+ <page string="Groups">
+ <field name="groups_id"/>
+ </page>
+ </notebook>
+ </sheet>
</form>
</field>
</record>
=== modified file 'openerp/addons/base/ir/ir_ui_view.py'
--- openerp/addons/base/ir/ir_ui_view.py 2012-08-14 10:00:49 +0000
+++ openerp/addons/base/ir/ir_ui_view.py 2012-09-04 12:12:40 +0000
@@ -78,6 +78,8 @@
'field_parent': fields.char('Child Field',size=64),
'xml_id': fields.function(osv.osv.get_xml_id, type='char', size=128, string="External ID",
help="ID of the view defined in xml file"),
+ 'groups_id': fields.many2many('res.groups', 'ir_ui_view_group_rel', 'view_id', 'group_id',
+ string='Groups', help="If this field is empty, the view applies to all users. Otherwise, the view applies to the users of those groups only."),
}
_defaults = {
'arch': '<?xml version="1.0"?>\n<tree string="My view">\n\t<field name="name"/>\n</tree>',
@@ -167,20 +169,25 @@
: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)):
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp