Merge pull request #250 from hbrunn/8.0-auth_dynamic_groups-fix_cursor_serialized

[FIX] use a nonserialized cursor for updating user groups
pull/288/head
Stefan Rijnhart (Opener) 2015-10-30 15:31:00 +01:00
commit 89a6dd7b13
1 changed files with 20 additions and 20 deletions

View File

@ -19,7 +19,6 @@
# #
############################################################################## ##############################################################################
from openerp.models import Model from openerp.models import Model
from openerp.modules.registry import RegistryManager
from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID
@ -29,27 +28,28 @@ class res_users(Model):
def _login(self, db, login, password): def _login(self, db, login, password):
uid = super(res_users, self)._login(db, login, password) uid = super(res_users, self)._login(db, login, password)
if uid: if uid and uid != SUPERUSER_ID:
self.update_dynamic_groups(uid, db) self.update_dynamic_groups(uid, db)
return uid return uid
def update_dynamic_groups(self, uid, db): def update_dynamic_groups(self, uid, db):
pool = RegistryManager.get(db) cr = self.pool._db.cursor(serialized=False)
cr = pool._db.cursor() groups_obj = self.pool.get('res.groups')
user = pool.get('res.users').browse(cr, SUPERUSER_ID, uid) try:
groups_obj = pool.get('res.groups') dynamic_groups = groups_obj.browse(
user.write( cr, SUPERUSER_ID, groups_obj.search(
{ cr, SUPERUSER_ID, [('is_dynamic', '=', True)]))
'groups_id': [ cr.execute(
(4, dynamic_group.id) 'delete from res_groups_users_rel where uid=%s and gid in %s',
if dynamic_group.eval_dynamic_group_condition(uid=uid) (uid, tuple(dynamic_groups.ids)))
else (3, dynamic_group.id) for dynamic_group in dynamic_groups:
for dynamic_group in groups_obj.browse( if dynamic_group.eval_dynamic_group_condition(uid=uid):
cr, SUPERUSER_ID, cr.execute(
groups_obj.search(cr, SUPERUSER_ID, 'insert into res_groups_users_rel (uid, gid) values '
[('is_dynamic', '=', True)])) '(%s, %s)',
], (uid, dynamic_group.id))
}) self.invalidate_cache(cr, uid, ['groups_id'], [uid])
cr.commit() cr.commit()
cr.close() finally:
cr.close()