CCM NG/ccm-core: Bugfixes for RoleManagement of users

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4802 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2017-06-23 16:57:50 +00:00
parent 468208c225
commit b257f8d1b4
2 changed files with 17 additions and 5 deletions

View File

@ -21,6 +21,7 @@ package com.arsdigita.ui.admin.usersgroupsroles.users;
import org.libreccm.security.Group; import org.libreccm.security.Group;
import org.libreccm.security.GroupMembership; import org.libreccm.security.GroupMembership;
import org.libreccm.security.Party; import org.libreccm.security.Party;
import org.libreccm.security.PermissionChecker;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import org.libreccm.security.RoleManager; import org.libreccm.security.RoleManager;
import org.libreccm.security.RoleMembership; import org.libreccm.security.RoleMembership;
@ -54,6 +55,9 @@ class UsersController {
@Inject @Inject
private RoleManager roleManager; private RoleManager roleManager;
@Inject
private PermissionChecker permissionChecker;
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
protected List<Group> getAssignedGroups(final User user) { protected List<Group> getAssignedGroups(final User user) {
@ -166,8 +170,6 @@ class UsersController {
.collect(Collectors.joining(", ")); .collect(Collectors.joining(", "));
} }
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
protected void updateAssignedRoles(final User user, protected void updateAssignedRoles(final User user,
final List<Role> selectedRoles) { final List<Role> selectedRoles) {
@ -179,17 +181,24 @@ class UsersController {
user.getPartyId()))); user.getPartyId())));
final List<Role> assignedRoles = getAssignedRoles(user); final List<Role> assignedRoles = getAssignedRoles(user);
final List<Long> assignedRolesIds = getAssignedRoles(user)
.stream()
.map(Role::getRoleId)
.collect(Collectors.toList());
final List<Long> selectedRolesIds = selectedRoles
.stream()
.map(Role::getRoleId)
.collect(Collectors.toList());
//First check for newly added role //First check for newly added role
selectedRoles selectedRoles
.stream() .stream()
.filter(role -> !assignedRoles.contains(role)) .filter(role -> !assignedRolesIds.contains(role.getRoleId()))
.forEach(role -> assignRoleToParty(role, theUser)); .forEach(role -> assignRoleToParty(role, theUser));
//Than check for removed roles
assignedRoles assignedRoles
.stream() .stream()
.filter(role -> !selectedRoles.contains(role)) .filter(role -> !selectedRolesIds.contains(role.getRoleId()))
.forEach(role -> removeRoleFromParty(role, theUser)); .forEach(role -> removeRoleFromParty(role, theUser));
} }

View File

@ -51,6 +51,9 @@ public class RoleManager {
@Inject @Inject
private EntityManager entityManager; private EntityManager entityManager;
@Inject
private PermissionChecker permissionChecker;
/** /**
* Assigns a role to a party and saves the changed {@code Role} and * Assigns a role to a party and saves the changed {@code Role} and
* {@code Party} entities. If the provided {@code role} has already been * {@code Party} entities. If the provided {@code role} has already been