|
@ -22,11 +22,11 @@ from openerp.models import Model |
|
|
from openerp import SUPERUSER_ID |
|
|
from openerp import SUPERUSER_ID |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class res_users(Model): |
|
|
|
|
|
|
|
|
class ResUsers(Model): |
|
|
_inherit = 'res.users' |
|
|
_inherit = 'res.users' |
|
|
|
|
|
|
|
|
def _login(self, db, login, password): |
|
|
def _login(self, db, login, password): |
|
|
uid = super(res_users, self)._login(db, login, password) |
|
|
|
|
|
|
|
|
uid = super(ResUsers, self)._login(db, login, password) |
|
|
|
|
|
|
|
|
if uid and uid != SUPERUSER_ID: |
|
|
if uid and uid != SUPERUSER_ID: |
|
|
self.update_dynamic_groups(uid, db) |
|
|
self.update_dynamic_groups(uid, db) |
|
@ -40,9 +40,12 @@ class res_users(Model): |
|
|
dynamic_groups = groups_obj.browse( |
|
|
dynamic_groups = groups_obj.browse( |
|
|
cr, SUPERUSER_ID, groups_obj.search( |
|
|
cr, SUPERUSER_ID, groups_obj.search( |
|
|
cr, SUPERUSER_ID, [('is_dynamic', '=', True)])) |
|
|
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))) |
|
|
|
|
|
|
|
|
if dynamic_groups: |
|
|
|
|
|
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: |
|
|
for dynamic_group in dynamic_groups: |
|
|
if dynamic_group.eval_dynamic_group_condition(uid=uid): |
|
|
if dynamic_group.eval_dynamic_group_condition(uid=uid): |
|
|
cr.execute( |
|
|
cr.execute( |
|
@ -50,6 +53,8 @@ class res_users(Model): |
|
|
'(%s, %s)', |
|
|
'(%s, %s)', |
|
|
(uid, dynamic_group.id)) |
|
|
(uid, dynamic_group.id)) |
|
|
self.invalidate_cache(cr, uid, ['groups_id'], [uid]) |
|
|
self.invalidate_cache(cr, uid, ['groups_id'], [uid]) |
|
|
|
|
|
# we really need a new transaction |
|
|
|
|
|
# pylint: disable=invalid-commit |
|
|
cr.commit() |
|
|
cr.commit() |
|
|
finally: |
|
|
finally: |
|
|
cr.close() |
|
|
cr.close() |