From 2633848b3189f6b1d5fb2a9ae5da336755707b49 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 29 Jul 2011 14:42:35 +0200 Subject: [PATCH] add implied groups in all cases bzr revid: rco@openerp.com-20110729124235-95a3igb3cmunwiz1 --- openerp/addons/base/res/res_user.py | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/openerp/addons/base/res/res_user.py b/openerp/addons/base/res/res_user.py index 17c511c6594..48b06b172c7 100644 --- a/openerp/addons/base/res/res_user.py +++ b/openerp/addons/base/res/res_user.py @@ -551,6 +551,26 @@ class groups2(osv.osv): todo.extend(g.implied_ids) return list(closure) + def create(self, cr, uid, values, context=None): + group_id = super(groups2, self).create(cr, uid, values, context) + if values.get('users') or values.get('implied_ids'): + # add implied groups to all users of the group + group = self.browse(cr, uid, group_id) + self.pool.get('res.users').write(cr, uid, map(int, group.users), + {'groups_id': [(4, group_id)]}, context) + return group_id + + def write(self, cr, uid, ids, values, context=None): + res = super(groups2, self).write(cr, uid, ids, values, context) + if values.get('users') or values.get('implied_ids'): + # add implied groups (to all users of each group) + users_obj = self.pool.get('res.users') + groups = self.browse(cr, uid, ids) + for g in groups: + users_obj.write(cr, uid, map(int, g.users), + {'groups_id': [(4, g.id)]}, context) + return res + def get_rec_implied(self, cr, uid, context=None): "return a dictionary giving the recursively implied groups of each group" groups = self.browse(cr, 1, self.search(cr, 1, [])) @@ -672,6 +692,18 @@ class users2(osv.osv): # remove groups in 'rem' and add all implied groups in 'add' add = self.pool.get('res.groups').get_closure(cr, uid, add, context) values['groups_id'] = [(3, id) for id in rem] + [(4, id) for id in add] + elif 'groups_id' in values: + # add implied groups (only handles (4, ID) and (6, 0, IDs) cases) + closure = lambda ids: self.pool.get('res.groups').get_closure(cr, uid, ids, context) + groups = [] + for elem in values['groups_id']: + if elem[0] == 4: + groups.extend([(4, id) for id in closure([elem[1]])]) + elif elem[0] == 6: + groups.append((6, 0, closure(elem[2]))) + else: + groups.append(elem) + values['groups_id'] = groups return True def create(self, cr, uid, values, context=None):