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
Bert Van Groenendael
parent
185d344943
commit
1c2d2c69d3
@@ -46,6 +46,13 @@ class ResUsersRole(models.Model):
|
||||
self.update_users()
|
||||
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
|
||||
def update_users(self):
|
||||
"""Update all the users concerned by the roles identified by `ids`."""
|
||||
@@ -91,5 +98,5 @@ class ResUsersRoleLine(models.Model):
|
||||
def unlink(self):
|
||||
users = self.mapped('user_id')
|
||||
res = super(ResUsersRoleLine, self).unlink()
|
||||
users.set_groups_from_roles()
|
||||
users.set_groups_from_roles(force=True)
|
||||
return res
|
||||
|
||||
@@ -32,12 +32,13 @@ class ResUsers(models.Model):
|
||||
return res
|
||||
|
||||
@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.
|
||||
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:
|
||||
if not user.role_line_ids:
|
||||
if not user.role_line_ids and not force:
|
||||
continue
|
||||
group_ids = []
|
||||
role_lines = user.role_line_ids.filtered(
|
||||
|
||||
@@ -92,3 +92,53 @@ class TestUserRole(TransactionCase):
|
||||
role1_group_ids.append(self.role1_id.group_id.id)
|
||||
role_group_ids = sorted(set(role1_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