From b257f8d1b4e839139699bfc4b3bb8ca0ded4ecf8 Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 23 Jun 2017 16:57:50 +0000 Subject: [PATCH] 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 --- .../users/UsersController.java | 19 ++++++++++++++----- .../org/libreccm/security/RoleManager.java | 3 +++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/users/UsersController.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/users/UsersController.java index 2d93d0764..1a46c0e6b 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/users/UsersController.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/usersgroupsroles/users/UsersController.java @@ -21,6 +21,7 @@ package com.arsdigita.ui.admin.usersgroupsroles.users; import org.libreccm.security.Group; import org.libreccm.security.GroupMembership; import org.libreccm.security.Party; +import org.libreccm.security.PermissionChecker; import org.libreccm.security.Role; import org.libreccm.security.RoleManager; import org.libreccm.security.RoleMembership; @@ -54,6 +55,9 @@ class UsersController { @Inject private RoleManager roleManager; + @Inject + private PermissionChecker permissionChecker; + @Transactional(Transactional.TxType.REQUIRED) protected List getAssignedGroups(final User user) { @@ -166,8 +170,6 @@ class UsersController { .collect(Collectors.joining(", ")); } - - @Transactional(Transactional.TxType.REQUIRED) protected void updateAssignedRoles(final User user, final List selectedRoles) { @@ -179,17 +181,24 @@ class UsersController { user.getPartyId()))); final List assignedRoles = getAssignedRoles(user); + final List assignedRolesIds = getAssignedRoles(user) + .stream() + .map(Role::getRoleId) + .collect(Collectors.toList()); + final List selectedRolesIds = selectedRoles + .stream() + .map(Role::getRoleId) + .collect(Collectors.toList()); //First check for newly added role selectedRoles .stream() - .filter(role -> !assignedRoles.contains(role)) + .filter(role -> !assignedRolesIds.contains(role.getRoleId())) .forEach(role -> assignRoleToParty(role, theUser)); - //Than check for removed roles assignedRoles .stream() - .filter(role -> !selectedRoles.contains(role)) + .filter(role -> !selectedRolesIds.contains(role.getRoleId())) .forEach(role -> removeRoleFromParty(role, theUser)); } diff --git a/ccm-core/src/main/java/org/libreccm/security/RoleManager.java b/ccm-core/src/main/java/org/libreccm/security/RoleManager.java index 95fb39216..3b36d4fc8 100644 --- a/ccm-core/src/main/java/org/libreccm/security/RoleManager.java +++ b/ccm-core/src/main/java/org/libreccm/security/RoleManager.java @@ -50,6 +50,9 @@ public class RoleManager { @Inject private EntityManager entityManager; + + @Inject + private PermissionChecker permissionChecker; /** * Assigns a role to a party and saves the changed {@code Role} and