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

Reply via email to