Merge pull request #250 from hbrunn/8.0-auth_dynamic_groups-fix_cursor_serialized
[FIX] use a nonserialized cursor for updating user groupspull/288/head
commit
89a6dd7b13
|
@ -19,7 +19,6 @@
|
|||
#
|
||||
##############################################################################
|
||||
from openerp.models import Model
|
||||
from openerp.modules.registry import RegistryManager
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
|
||||
|
@ -29,27 +28,28 @@ class res_users(Model):
|
|||
def _login(self, 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)
|
||||
|
||||
return uid
|
||||
|
||||
def update_dynamic_groups(self, uid, db):
|
||||
pool = RegistryManager.get(db)
|
||||
cr = pool._db.cursor()
|
||||
user = pool.get('res.users').browse(cr, SUPERUSER_ID, uid)
|
||||
groups_obj = pool.get('res.groups')
|
||||
user.write(
|
||||
{
|
||||
'groups_id': [
|
||||
(4, dynamic_group.id)
|
||||
if dynamic_group.eval_dynamic_group_condition(uid=uid)
|
||||
else (3, dynamic_group.id)
|
||||
for dynamic_group in groups_obj.browse(
|
||||
cr, SUPERUSER_ID,
|
||||
groups_obj.search(cr, SUPERUSER_ID,
|
||||
[('is_dynamic', '=', True)]))
|
||||
],
|
||||
})
|
||||
cr.commit()
|
||||
cr.close()
|
||||
cr = self.pool._db.cursor(serialized=False)
|
||||
groups_obj = self.pool.get('res.groups')
|
||||
try:
|
||||
dynamic_groups = groups_obj.browse(
|
||||
cr, SUPERUSER_ID, groups_obj.search(
|
||||
cr, SUPERUSER_ID, [('is_dynamic', '=', True)]))
|
||||
cr.execute(
|
||||
'delete from res_groups_users_rel where uid=%s and gid in %s',
|
||||
(uid, tuple(dynamic_groups.ids)))
|
||||
for dynamic_group in dynamic_groups:
|
||||
if dynamic_group.eval_dynamic_group_condition(uid=uid):
|
||||
cr.execute(
|
||||
'insert into res_groups_users_rel (uid, gid) values '
|
||||
'(%s, %s)',
|
||||
(uid, dynamic_group.id))
|
||||
self.invalidate_cache(cr, uid, ['groups_id'], [uid])
|
||||
cr.commit()
|
||||
finally:
|
||||
cr.close()
|
||||
|
|
Loading…
Reference in New Issue