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;