mirror of
https://github.com/OCA/server-backend.git
synced 2025-02-18 09:52:42 +02:00
[FIX+IMP] base_user_role: Several things:
* FIX: Update users' groups when a role is deleted * IMP: add some test cases to check user's groups when its last role line is removed * FIX: ensure that the user's groups are updated when its last role line is removed
This commit is contained in:
committed by
Tatiana Deribina
parent
c7b5e7b268
commit
50441f62da
@@ -46,6 +46,13 @@ class ResUsersRole(models.Model):
|
|||||||
self.update_users()
|
self.update_users()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def unlink(self):
|
||||||
|
users = self.mapped('user_ids')
|
||||||
|
res = super(ResUsersRole, self).unlink()
|
||||||
|
users.set_groups_from_roles(force=True)
|
||||||
|
return res
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def update_users(self):
|
def update_users(self):
|
||||||
"""Update all the users concerned by the roles identified by `ids`."""
|
"""Update all the users concerned by the roles identified by `ids`."""
|
||||||
@@ -91,5 +98,5 @@ class ResUsersRoleLine(models.Model):
|
|||||||
def unlink(self):
|
def unlink(self):
|
||||||
users = self.mapped('user_id')
|
users = self.mapped('user_id')
|
||||||
res = super(ResUsersRoleLine, self).unlink()
|
res = super(ResUsersRoleLine, self).unlink()
|
||||||
users.set_groups_from_roles()
|
users.set_groups_from_roles(force=True)
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -32,12 +32,13 @@ class ResUsers(models.Model):
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def set_groups_from_roles(self):
|
def set_groups_from_roles(self, force=False):
|
||||||
"""Set (replace) the groups following the roles defined on users.
|
"""Set (replace) the groups following the roles defined on users.
|
||||||
If no role is defined on the user, its groups are let untouched.
|
If no role is defined on the user, its groups are let untouched unless
|
||||||
|
the `force` parameter is `True`.
|
||||||
"""
|
"""
|
||||||
for user in self:
|
for user in self:
|
||||||
if not user.role_line_ids:
|
if not user.role_line_ids and not force:
|
||||||
continue
|
continue
|
||||||
group_ids = []
|
group_ids = []
|
||||||
role_lines = user.role_line_ids.filtered(
|
role_lines = user.role_line_ids.filtered(
|
||||||
|
|||||||
@@ -92,3 +92,53 @@ class TestUserRole(TransactionCase):
|
|||||||
role1_group_ids.append(self.role1_id.group_id.id)
|
role1_group_ids.append(self.role1_id.group_id.id)
|
||||||
role_group_ids = sorted(set(role1_group_ids))
|
role_group_ids = sorted(set(role1_group_ids))
|
||||||
self.assertEqual(user_group_ids, role_group_ids)
|
self.assertEqual(user_group_ids, role_group_ids)
|
||||||
|
|
||||||
|
def test_role_unlink(self):
|
||||||
|
# Get role1 groups
|
||||||
|
role1 = self.role_model.browse(self.cr, self.uid, self.role1_id)
|
||||||
|
role1_group_ids = role1.implied_ids.ids
|
||||||
|
role1_group_ids.append(role1.group_id.id)
|
||||||
|
role1_group_ids = sorted(set(role1_group_ids))
|
||||||
|
# Get role2
|
||||||
|
role2 = self.role_model.browse(self.cr, self.uid, self.role2_id)
|
||||||
|
# Configure the user with role1 and role2
|
||||||
|
self.user_model.write(
|
||||||
|
self.cr, self.uid, [self.user_id],
|
||||||
|
{'role_line_ids': [
|
||||||
|
(0, 0, {'role_id': self.role1_id}),
|
||||||
|
(0, 0, {'role_id': self.role2_id}),
|
||||||
|
]})
|
||||||
|
user = self.user_model.browse(self.cr, self.uid, self.user_id)
|
||||||
|
# Remove role2
|
||||||
|
role2.unlink()
|
||||||
|
user_group_ids = sorted(set([group.id for group in user.groups_id]))
|
||||||
|
self.assertEqual(user_group_ids, role1_group_ids)
|
||||||
|
# Remove role1
|
||||||
|
role1.unlink()
|
||||||
|
user_group_ids = sorted(set([group.id for group in user.groups_id]))
|
||||||
|
self.assertEqual(user_group_ids, [])
|
||||||
|
|
||||||
|
def test_role_line_unlink(self):
|
||||||
|
# Get role1 groups
|
||||||
|
role1 = self.role_model.browse(self.cr, self.uid, self.role1_id)
|
||||||
|
role1_group_ids = role1.implied_ids.ids
|
||||||
|
role1_group_ids.append(role1.group_id.id)
|
||||||
|
role1_group_ids = sorted(set(role1_group_ids))
|
||||||
|
# Configure the user with role1 and role2
|
||||||
|
self.user_model.write(
|
||||||
|
self.cr, self.uid, [self.user_id],
|
||||||
|
{'role_line_ids': [
|
||||||
|
(0, 0, {'role_id': self.role1_id}),
|
||||||
|
(0, 0, {'role_id': self.role2_id}),
|
||||||
|
]})
|
||||||
|
user = self.user_model.browse(self.cr, self.uid, self.user_id)
|
||||||
|
# Remove role2 from the user
|
||||||
|
user.role_line_ids.filtered(
|
||||||
|
lambda l: l.role_id.id == self.role2_id).unlink()
|
||||||
|
user_group_ids = sorted(set([group.id for group in user.groups_id]))
|
||||||
|
self.assertEqual(user_group_ids, role1_group_ids)
|
||||||
|
# Remove role1 from the user
|
||||||
|
user.role_line_ids.filtered(
|
||||||
|
lambda l: l.role_id.id == self.role1_id).unlink()
|
||||||
|
user_group_ids = sorted(set([group.id for group in user.groups_id]))
|
||||||
|
self.assertEqual(user_group_ids, [])
|
||||||
|
|||||||
Reference in New Issue
Block a user