diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py
index 523db591a73..60b19502fd0 100644
--- a/openerp/addons/base/res/res_users.py
+++ b/openerp/addons/base/res/res_users.py
@@ -162,6 +162,12 @@ class res_users(osv.osv):
res[user.id] = not self.has_group(cr, user.id, 'base.group_user')
return res
+ def _store_trigger_share_res_groups(self, cr, uid, ids, context=None):
+ group_user = self.pool['ir.model.data'].xmlid_to_object(cr, SUPERUSER_ID, 'base.group_user', context=context)
+ if group_user and group_user.id in ids:
+ return group_user.users.ids
+ return []
+
def _get_users_from_group(self, cr, uid, ids, context=None):
result = set()
groups = self.pool['res.groups'].browse(cr, uid, ids, context=context)
@@ -197,8 +203,8 @@ class res_users(osv.osv):
'company_ids':fields.many2many('res.company','res_company_users_rel','user_id','cid','Companies'),
'share': fields.function(_is_share, string='Share User', type='boolean',
store={
- 'res.users': (lambda self, cr, uid, ids, c={}: ids, None, 50),
- 'res.groups': (_get_users_from_group, None, 50),
+ 'res.users': (lambda self, cr, uid, ids, c={}: ids, ['groups_id'], 50),
+ 'res.groups': (_store_trigger_share_res_groups, ['users'], 50),
}, help="External user with limited access, created only for the purpose of sharing data."),
}
diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml
index a93dd785e26..c5c60632758 100644
--- a/openerp/addons/base/security/base_security.xml
+++ b/openerp/addons/base/security/base_security.xml
@@ -23,7 +23,6 @@
Employee
-
@@ -44,6 +43,7 @@
+
diff --git a/openerp/addons/base/tests/test_orm.py b/openerp/addons/base/tests/test_orm.py
index a288a1c2f37..9f96931ad44 100644
--- a/openerp/addons/base/tests/test_orm.py
+++ b/openerp/addons/base/tests/test_orm.py
@@ -166,6 +166,22 @@ class TestORM(common.TransactionCase):
['date'], ['date:month', 'date:day'], lazy=False)
self.assertEqual(len(rg), len(all_partners))
+ def test_m2m_store_trigger(self):
+ group_user = self.env.ref('base.group_user')
+
+ user = self.env['res.users'].create({
+ 'name': 'test',
+ 'login': 'test_m2m_store_trigger',
+ 'groups_id': [(6, 0, [])],
+ })
+ self.assertTrue(user.share)
+
+ group_user.write({'users': [(4, user.id)]})
+ self.assertFalse(user.share)
+
+ group_user.write({'users': [(3, user.id)]})
+ self.assertTrue(user.share)
+
class TestInherits(common.TransactionCase):
""" test the behavior of the orm for models that use _inherits;