Reviewers: ,


Please review this at http://codereview.tryton.org/125003/

Affected files:
  M trytond/model/modelview.py


Index: trytond/model/modelview.py
===================================================================
--- a/trytond/model/modelview.py
+++ b/trytond/model/modelview.py
@@ -263,6 +263,7 @@

     def _view_look_dom_arch(self, tree, type, field_children=None):
         pool = Pool()
+        model_access_obj = pool.get('ir.model.access')
         field_access_obj = pool.get('ir.model.field.access')

         fields_width = {}
@@ -273,6 +274,26 @@
                 self._columns.keys(), 'read', access=True)
         fields_to_remove = list(x for x, y in fread_accesses.iteritems()
                 if not y)
+
+        def check_relation(field):
+            if field._type in ('one2many', 'many2one'):
+ if not model_access_obj.check(field.model_name, mode='read',
+                        raise_exception=False):
+                    return False
+            if field._type in ('many2many', 'one2one'):
+                if not model_access_obj.check(field.target, mode='read',
+                        raise_exception=False):
+                    return False
+                elif not model_access_obj.check(field.relation_name,
+                        mode='read', raise_exception=False):
+                    return False
+            return True
+
+        # Find relation field without read access
+        for name, field in self._columns.iteritems():
+            if not check_relation(field):
+                fields_to_remove.append(name)
+
         for name, field in self._columns.iteritems():
             for field_to_remove in fields_to_remove:
                 if field_to_remove in field.depends:
@@ -285,6 +306,12 @@
                     inherit_obj._columns.keys(), 'read', access=True)
fields_to_remove += list(x for x, y in fread_accesses.iteritems()
                     if not y and x not in self._columns.keys())
+
+            # Find relation field without read access
+            for name, field in inherit_obj._columns.iteritems():
+                if not check_relation(field):
+                    fields_to_remove.append(name)
+
             for name, field in inherit_obj._columns.iteritems():
                 for field_to_remove in fields_to_remove:
                     if field_to_remove in field.depends:


--
[email protected] mailing list

Reply via email to