summaryrefslogtreecommitdiff
path: root/odoo/addons/base/models/res_users.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-01-28 13:58:11 +0000
committerChristophe Simonis <chs@odoo.com>2019-01-28 13:58:11 +0000
commitcf52a04979d7634908c2f0d8eb6a83b7dd614f64 (patch)
tree2f8c25f3fab45268400c4ac6addfa15f1f2d37f0 /odoo/addons/base/models/res_users.py
parentcd1f57e9ded2e8ca81d7290e4b5b95a8776045c6 (diff)
parentd3b8422c9c44557256836bdc0da5480f553eec4d (diff)
[MERGE] forward port branch saas-12.1 up to d3b8422c9c4
closes odoo/odoo#30614
Diffstat (limited to 'odoo/addons/base/models/res_users.py')
-rw-r--r--odoo/addons/base/models/res_users.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py
index dfa5f61e25b..73eb10b9f86 100644
--- a/odoo/addons/base/models/res_users.py
+++ b/odoo/addons/base/models/res_users.py
@@ -922,8 +922,26 @@ class GroupsImplied(models.Model):
if values.get('users') or values.get('implied_ids'):
# add all implied groups (to all users of each group)
for group in self:
- vals = {'users': list(zip(repeat(4), group.with_context(active_test=False).users.ids))}
- super(GroupsImplied, group.trans_implied_ids).write(vals)
+ self._cr.execute("""
+ WITH RECURSIVE group_imply(gid, hid) AS (
+ SELECT gid, hid
+ FROM res_groups_implied_rel
+ UNION
+ SELECT i.gid, r.hid
+ FROM res_groups_implied_rel r
+ JOIN group_imply i ON (i.hid = r.gid)
+ )
+ INSERT INTO res_groups_users_rel (gid, uid)
+ SELECT i.hid, r.uid
+ FROM group_imply i, res_groups_users_rel r
+ WHERE r.gid = i.gid
+ AND i.gid = %(gid)s
+ EXCEPT
+ SELECT r.gid, r.uid
+ FROM res_groups_users_rel r
+ JOIN group_imply i ON (r.gid = i.hid)
+ WHERE i.gid = %(gid)s
+ """, dict(gid=group.id))
return res
class UsersImplied(models.Model):