Defect #25289
closedAdding a principal to 2 projects with member inheritance leads to an error
0%
Description
When batch adding a user or a group to a project through the projects tab of the user/group page, adding the a user or group to 2 projects where one project inherits its members from the other might lead to an error (depending on the order of the projects, the parent project must come before the child project for this to happen, which it should as in the batch add view projects are arranged in trees). If more than those 2 projects are involved in the batch addition to a project, the user or group won't be added to all projects that come after the child project as the processing stops on the error.
This happens in source:/trunk/app/models/member.rb@16379#L175: First all Member
s are created, then they are saved in the principal.members << members
line. Saving the Member
object for a parent project with a child project inheriting its members will create a Member
object for the child project too, which then leads to an error when the Member
error created for that child project is saved and recognised as a duplicate.
Files
Updated by Felix Schäfer over 7 years ago
- File 25289.patch 25289.patch added
The attached patch solves this problem. No test though as this method is currently untested, we can provide tests too if required.
The patch saves each new Member
directly in the loop instead of saving all in one go at the end of the loop. Please note that this does not significantly affect performance as principal.members << members
still saves each Member
one at a time. This allows the loop to recognise if a previous iteration already created a Member
we are trying to instantiate and avoids the clash described above.
Please note that roles are added to the Member
instead of destructively replacing already present roles. This would also allow changing the "Add project" modal of groups/users from being able to only add the group/user to projects it is not already a member of to adding the user/group with the selected role to any project in addition to already existing role/project combinations for that user/group.
Updated by Jean-Philippe Lang over 7 years ago
- Category set to Administration
- Status changed from New to Closed
- Assignee set to Jean-Philippe Lang
- Target version set to 3.4.0
- Resolution set to Fixed
Patch committed, thanks for catching this issue. I've added a test for this.