CCM NG/ccm-core: Fixed several Exceptions when editing Users and Roles
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4798 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
8804fad68c
commit
2abe7aeb2c
|
|
@ -162,6 +162,9 @@ class RoleAddMemberForm extends Form {
|
||||||
switch (event.getColumn()) {
|
switch (event.getColumn()) {
|
||||||
case COL_MEMBER_ADD:
|
case COL_MEMBER_ADD:
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
|
||||||
|
final RolesController controller = cdiUtil
|
||||||
|
.findBean(RolesController.class);
|
||||||
final PartyRepository partyRepository = cdiUtil
|
final PartyRepository partyRepository = cdiUtil
|
||||||
.findBean(PartyRepository.class);
|
.findBean(PartyRepository.class);
|
||||||
final RoleRepository roleRepository = cdiUtil
|
final RoleRepository roleRepository = cdiUtil
|
||||||
|
|
@ -170,10 +173,12 @@ class RoleAddMemberForm extends Form {
|
||||||
RoleManager.class);
|
RoleManager.class);
|
||||||
final Party party = partyRepository.findById(
|
final Party party = partyRepository.findById(
|
||||||
Long.parseLong(key)).get();
|
Long.parseLong(key)).get();
|
||||||
|
|
||||||
final Role role = roleRepository.findById(
|
final Role role = roleRepository.findById(
|
||||||
Long.parseLong(
|
Long.parseLong(
|
||||||
selectedRoleId.getSelectedKey(state))).get();
|
selectedRoleId.getSelectedKey(state))).get();
|
||||||
roleManager.assignRoleToParty(role, party);
|
controller.assignRoleToParty(role, party);
|
||||||
|
|
||||||
roleAdmin.hideRoleMemberAddForm(state);
|
roleAdmin.hideRoleMemberAddForm(state);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ import com.arsdigita.bebop.table.TableModelBuilder;
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.util.LockableImpl;
|
import com.arsdigita.util.LockableImpl;
|
||||||
|
|
||||||
|
import org.libreccm.admin.ui.usersgroupsroles.UsersGroupsRoles;
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.security.Group;
|
import org.libreccm.security.Group;
|
||||||
import org.libreccm.security.Party;
|
import org.libreccm.security.Party;
|
||||||
|
|
@ -121,7 +122,8 @@ class RoleMembersTable extends Table {
|
||||||
final Party party = partyRepository.findById(Long
|
final Party party = partyRepository.findById(Long
|
||||||
.parseLong(key)).get();
|
.parseLong(key)).get();
|
||||||
final Role role = roleRepository.findById(
|
final Role role = roleRepository.findById(
|
||||||
Long.parseLong(selectedRoleId.getSelectedKey(state))).get();
|
Long.parseLong(selectedRoleId.getSelectedKey(state)))
|
||||||
|
.get();
|
||||||
roleManager.removeRoleFromParty(role, party);
|
roleManager.removeRoleFromParty(role, party);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -170,20 +172,25 @@ class RoleMembersTable extends Table {
|
||||||
final ParameterSingleSelectionModel<String> selectedRoleId,
|
final ParameterSingleSelectionModel<String> selectedRoleId,
|
||||||
final PageState state) {
|
final PageState state) {
|
||||||
|
|
||||||
final RoleRepository roleRepository = CdiUtil.createCdiUtil()
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final RoleRepository roleRepository = cdiUtil
|
||||||
.findBean(RoleRepository.class);
|
.findBean(RoleRepository.class);
|
||||||
final Role role = roleRepository.findById(Long.parseLong(
|
final Role role = roleRepository.findById(Long.parseLong(
|
||||||
selectedRoleId.getSelectedKey(state))).get();
|
selectedRoleId.getSelectedKey(state))).get();
|
||||||
|
//
|
||||||
|
// members = new ArrayList<>();
|
||||||
|
//
|
||||||
|
// role.getMemberships().forEach(m -> {
|
||||||
|
// members.add(m.getMember());
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// members.sort((m1, m2) -> {
|
||||||
|
// return m1.getName().compareTo(m2.getName());
|
||||||
|
// });
|
||||||
|
|
||||||
members = new ArrayList<>();
|
final RolesController controller = cdiUtil
|
||||||
|
.findBean(RolesController.class);
|
||||||
role.getMemberships().forEach(m -> {
|
members = controller.getMembersOfRole(role);
|
||||||
members.add(m.getMember());
|
|
||||||
});
|
|
||||||
|
|
||||||
members.sort((m1, m2) -> {
|
|
||||||
return m1.getName().compareTo(m2.getName());
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
package com.arsdigita.ui.admin.usersgroupsroles.roles;
|
||||||
|
|
||||||
|
import org.libreccm.security.Party;
|
||||||
|
import org.libreccm.security.PartyRepository;
|
||||||
|
import org.libreccm.security.Role;
|
||||||
|
import org.libreccm.security.RoleManager;
|
||||||
|
import org.libreccm.security.RoleMembership;
|
||||||
|
import org.libreccm.security.RoleRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@RequestScoped
|
||||||
|
public class RolesController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PartyRepository partyRepo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private RoleRepository roleRepo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private RoleManager roleManager;
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected List<Party> getMembersOfRole(final Role role) {
|
||||||
|
|
||||||
|
final Role theRole = roleRepo
|
||||||
|
.findById(role.getRoleId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No Role with ID %d in the database.",
|
||||||
|
role.getRoleId())));
|
||||||
|
|
||||||
|
return theRole
|
||||||
|
.getMemberships()
|
||||||
|
.stream()
|
||||||
|
.map(RoleMembership::getMember)
|
||||||
|
.sorted((role1, role2) -> role1.getName().compareTo(role2.getName()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected List<String> getNamesOfMembersOfRole(final Role role) {
|
||||||
|
|
||||||
|
final Role theRole = roleRepo
|
||||||
|
.findById(role.getRoleId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No Role with ID %d in the database.",
|
||||||
|
role.getRoleId())));
|
||||||
|
|
||||||
|
return theRole
|
||||||
|
.getMemberships()
|
||||||
|
.stream()
|
||||||
|
.map(RoleMembership::getMember)
|
||||||
|
.map(Party::getName)
|
||||||
|
.sorted((name1, name2) -> name1.compareTo(name2))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected void assignRoleToParty(final Role role, final Party party) {
|
||||||
|
|
||||||
|
final Party assignee = partyRepo
|
||||||
|
.findById(party.getPartyId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No Party with ID %d in the database.",
|
||||||
|
party.getPartyId())));
|
||||||
|
|
||||||
|
final Role assignTo = roleRepo
|
||||||
|
.findById(role.getRoleId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No Role with ID %d in the database.",
|
||||||
|
role.getRoleId())));
|
||||||
|
|
||||||
|
roleManager.assignRoleToParty(assignTo, assignee);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -92,8 +92,8 @@ class GroupsRolesTableModel implements TableModel {
|
||||||
ADMIN_BUNDLE));
|
ADMIN_BUNDLE));
|
||||||
case COL_VALUE: {
|
case COL_VALUE: {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final UsersGroupsRolesController controller = cdiUtil
|
final UsersController controller = cdiUtil
|
||||||
.findBean(UsersGroupsRolesController.class);
|
.findBean(UsersController.class);
|
||||||
|
|
||||||
return controller.getNamesOfAssignedGroups(user);
|
return controller.getNamesOfAssignedGroups(user);
|
||||||
}
|
}
|
||||||
|
|
@ -112,8 +112,8 @@ class GroupsRolesTableModel implements TableModel {
|
||||||
ADMIN_BUNDLE));
|
ADMIN_BUNDLE));
|
||||||
case COL_VALUE: {
|
case COL_VALUE: {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final UsersGroupsRolesController controller = cdiUtil
|
final UsersController controller = cdiUtil
|
||||||
.findBean(UsersGroupsRolesController.class);
|
.findBean(UsersController.class);
|
||||||
|
|
||||||
return controller.getNamesOfAssignedGroups(user);
|
return controller.getNamesOfAssignedGroups(user);
|
||||||
}
|
}
|
||||||
|
|
@ -132,8 +132,8 @@ class GroupsRolesTableModel implements TableModel {
|
||||||
"ui.admin.user.all_roles", ADMIN_BUNDLE));
|
"ui.admin.user.all_roles", ADMIN_BUNDLE));
|
||||||
case COL_VALUE: {
|
case COL_VALUE: {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final UsersGroupsRolesController controller = cdiUtil
|
final UsersController controller = cdiUtil
|
||||||
.findBean(UsersGroupsRolesController.class);
|
.findBean(UsersController.class);
|
||||||
|
|
||||||
return controller.getNamesOfAllAssignedRoles(user);
|
return controller.getNamesOfAllAssignedRoles(user);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -129,19 +129,20 @@ class RoleMembershipsForm extends Form {
|
||||||
saveCancelSection = new SaveCancelSection();
|
saveCancelSection = new SaveCancelSection();
|
||||||
add(saveCancelSection);
|
add(saveCancelSection);
|
||||||
|
|
||||||
addInitListener(e -> {
|
addInitListener(event -> {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final UserRepository userRepository = cdiUtil.findBean(
|
final UserRepository userRepository = cdiUtil
|
||||||
UserRepository.class);
|
.findBean(UserRepository.class);
|
||||||
|
final UsersController controller = cdiUtil
|
||||||
|
.findBean(UsersController.class);
|
||||||
|
|
||||||
final PageState state = e.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
final User user = userRepository.findById(Long.parseLong(
|
final User user = userRepository
|
||||||
selectedUserId.getSelectedKey(state))).get();
|
.findById(Long.parseLong(selectedUserId.getSelectedKey(state)))
|
||||||
final List<Role> assignedRoles = new ArrayList<>();
|
.get();
|
||||||
user.getRoleMemberships().forEach(m -> {
|
final List<Role> assignedRoles = controller
|
||||||
assignedRoles.add(m.getRole());
|
.getAssignedRoles(user);
|
||||||
});
|
|
||||||
|
|
||||||
final String[] selectedRoles = new String[assignedRoles.size()];
|
final String[] selectedRoles = new String[assignedRoles.size()];
|
||||||
IntStream.range(0, assignedRoles.size()).forEach(i -> {
|
IntStream.range(0, assignedRoles.size()).forEach(i -> {
|
||||||
|
|
@ -152,56 +153,65 @@ class RoleMembershipsForm extends Form {
|
||||||
roles.setValue(state, selectedRoles);
|
roles.setValue(state, selectedRoles);
|
||||||
});
|
});
|
||||||
|
|
||||||
addProcessListener(e -> {
|
addProcessListener(event -> {
|
||||||
final PageState state = e.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
||||||
|
|
||||||
final FormData data = e.getFormData();
|
final FormData data = event.getFormData();
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final UserRepository userRepository = cdiUtil.findBean(
|
final UserRepository userRepository = cdiUtil
|
||||||
UserRepository.class);
|
.findBean(UserRepository.class);
|
||||||
final RoleRepository roleRepository = cdiUtil.findBean(
|
final RoleRepository roleRepository = cdiUtil
|
||||||
RoleRepository.class);
|
.findBean(RoleRepository.class);
|
||||||
final RoleManager roleManager = cdiUtil.findBean(
|
final RoleManager roleManager = cdiUtil
|
||||||
RoleManager.class);
|
.findBean(RoleManager.class);
|
||||||
|
final UsersController controller = cdiUtil
|
||||||
|
.findBean(UsersController.class);
|
||||||
|
|
||||||
final String[] selectedRolesIds = (String[]) data.get(
|
final String[] selectedRolesIds = (String[]) data
|
||||||
ROLES_SELECTOR);
|
.get(ROLES_SELECTOR);
|
||||||
|
|
||||||
final User user = userRepository.findById(Long.parseLong(
|
final User user = userRepository
|
||||||
selectedUserId.getSelectedKey(state))).get();
|
.findById(Long
|
||||||
|
.parseLong(selectedUserId.getSelectedKey(state)))
|
||||||
|
.get();
|
||||||
final List<Role> selectedRoles = new ArrayList<>();
|
final List<Role> selectedRoles = new ArrayList<>();
|
||||||
if (selectedRolesIds != null) {
|
if (selectedRolesIds != null) {
|
||||||
Arrays.stream(selectedRolesIds).forEach(id -> {
|
Arrays
|
||||||
final Role role = roleRepository.findById(
|
.stream(selectedRolesIds)
|
||||||
Long.parseLong(id)).get();
|
.forEach(id -> {
|
||||||
selectedRoles.add(role);
|
final Role role = roleRepository
|
||||||
});
|
.findById(Long.parseLong(id))
|
||||||
|
.get();
|
||||||
|
selectedRoles.add(role);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final List<Role> assignedRoles = new ArrayList<>();
|
|
||||||
user.getRoleMemberships().forEach(m -> {
|
|
||||||
assignedRoles.add(m.getRole());
|
|
||||||
});
|
|
||||||
|
|
||||||
//First check for newly added roles
|
controller.updateAssignedRoles(user, selectedRoles);
|
||||||
selectedRoles.forEach(r -> {
|
|
||||||
if (!assignedRoles.contains(r)) {
|
|
||||||
roleManager.assignRoleToParty(r, user);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//Than check for removed roles
|
// final List<Role> assignedRoles = controller
|
||||||
assignedRoles.forEach(r -> {
|
// .getAssignedRoles(user);
|
||||||
if (!selectedRoles.contains(r)) {
|
//
|
||||||
//Role is maybe detached or not fully loaded,
|
// //First check for newly added roles
|
||||||
//therefore we load the role from the database.
|
// selectedRoles.forEach(role -> {
|
||||||
final Role role = roleRepository.findById(r.getRoleId())
|
// if (!assignedRoles.contains(role)) {
|
||||||
.get();
|
// roleManager.assignRoleToParty(role, user);
|
||||||
roleManager.removeRoleFromParty(role, user);
|
// }
|
||||||
}
|
// });
|
||||||
});
|
//
|
||||||
|
// //Than check for removed roles
|
||||||
|
// assignedRoles.forEach(role -> {
|
||||||
|
// if (!selectedRoles.contains(role)) {
|
||||||
|
// //Role is maybe detached or not fully loaded,
|
||||||
|
// //therefore we load the role from the database.
|
||||||
|
// final Role roleToRemove = roleRepository
|
||||||
|
// .findById(role.getRoleId())
|
||||||
|
// .get();
|
||||||
|
// roleManager.removeRoleFromParty(roleToRemove, user);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
userAdmin.closeEditRoleMembershipsForm(state);
|
userAdmin.closeEditRoleMembershipsForm(state);
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,14 @@ 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.Role;
|
import org.libreccm.security.Role;
|
||||||
|
import org.libreccm.security.RoleManager;
|
||||||
import org.libreccm.security.RoleMembership;
|
import org.libreccm.security.RoleMembership;
|
||||||
|
import org.libreccm.security.RoleRepository;
|
||||||
import org.libreccm.security.User;
|
import org.libreccm.security.User;
|
||||||
import org.libreccm.security.UserRepository;
|
import org.libreccm.security.UserRepository;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
@ -41,11 +43,37 @@ import javax.transaction.Transactional;
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
@RequestScoped
|
@RequestScoped
|
||||||
class UsersGroupsRolesController {
|
class UsersController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private UserRepository userRepo;
|
private UserRepository userRepo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private RoleRepository roleRepo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private RoleManager roleManager;
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected List<Group> getAssignedGroups(final User user) {
|
||||||
|
|
||||||
|
final User theUser = userRepo
|
||||||
|
.findById(user.getPartyId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No User with ID %d in the database.",
|
||||||
|
user.getPartyId())));
|
||||||
|
|
||||||
|
return theUser
|
||||||
|
.getGroupMemberships()
|
||||||
|
.stream()
|
||||||
|
.map(GroupMembership::getGroup)
|
||||||
|
.sorted((group1, group2) -> {
|
||||||
|
return group1.getName().compareTo(group2.getName());
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
protected String getNamesOfAssignedGroups(final User user) {
|
protected String getNamesOfAssignedGroups(final User user) {
|
||||||
|
|
||||||
|
|
@ -65,7 +93,27 @@ class UsersGroupsRolesController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public String getNamesOfAssignedRoles(final User user) {
|
protected List<Role> getAssignedRoles(final User user) {
|
||||||
|
|
||||||
|
final User theUser = userRepo
|
||||||
|
.findById(user.getPartyId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No User with ID %d in the database.",
|
||||||
|
user.getPartyId())));
|
||||||
|
|
||||||
|
return theUser
|
||||||
|
.getRoleMemberships()
|
||||||
|
.stream()
|
||||||
|
.map(RoleMembership::getRole)
|
||||||
|
.sorted((role1, role2) -> {
|
||||||
|
return role1.getName().compareTo(role2.getName());
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected String getNamesOfAssignedRoles(final User user) {
|
||||||
|
|
||||||
final User theUser = userRepo
|
final User theUser = userRepo
|
||||||
.findById(user.getPartyId())
|
.findById(user.getPartyId())
|
||||||
|
|
@ -84,7 +132,7 @@ class UsersGroupsRolesController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public String getNamesOfAllAssignedRoles(final User user) {
|
protected String getNamesOfAllAssignedRoles(final User user) {
|
||||||
|
|
||||||
final User theUser = userRepo
|
final User theUser = userRepo
|
||||||
.findById(user.getPartyId())
|
.findById(user.getPartyId())
|
||||||
|
|
@ -118,4 +166,53 @@ class UsersGroupsRolesController {
|
||||||
.collect(Collectors.joining(", "));
|
.collect(Collectors.joining(", "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected void updateAssignedRoles(final User user,
|
||||||
|
final List<Role> selectedRoles) {
|
||||||
|
|
||||||
|
final User theUser = userRepo
|
||||||
|
.findById(user.getPartyId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No User with ID %d in the database.",
|
||||||
|
user.getPartyId())));
|
||||||
|
|
||||||
|
final List<Role> assignedRoles = getAssignedRoles(user);
|
||||||
|
|
||||||
|
//First check for newly added role
|
||||||
|
selectedRoles
|
||||||
|
.stream()
|
||||||
|
.filter(role -> !assignedRoles.contains(role))
|
||||||
|
.forEach(role -> assignRoleToParty(role, theUser));
|
||||||
|
|
||||||
|
//Than check for removed roles
|
||||||
|
assignedRoles
|
||||||
|
.stream()
|
||||||
|
.filter(role -> !selectedRoles.contains(role))
|
||||||
|
.forEach(role -> removeRoleFromParty(role, theUser));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assignRoleToParty(final Role role, final Party party) {
|
||||||
|
|
||||||
|
final Role roleToAdd = roleRepo
|
||||||
|
.findById(role.getRoleId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No Role with ID %d in the database.",
|
||||||
|
role.getRoleId())));
|
||||||
|
|
||||||
|
roleManager.assignRoleToParty(roleToAdd, party);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeRoleFromParty(final Role role, final Party party) {
|
||||||
|
|
||||||
|
final Role roleToRemove = roleRepo
|
||||||
|
.findById(role.getRoleId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No Role with ID %d in the database.",
|
||||||
|
role.getRoleId())));
|
||||||
|
|
||||||
|
roleManager.removeRoleFromParty(roleToRemove, party);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -79,7 +79,7 @@ public class PermissionChecker {
|
||||||
if (shiro.isSystemUser()) {
|
if (shiro.isSystemUser()) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return subject.isPermitted(generatePermissionString(privilege));
|
return subject.isPermitted(generatePermissionString(privilege));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return shiro.getPublicUser().isPermitted(generatePermissionString(
|
return shiro.getPublicUser().isPermitted(generatePermissionString(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue