MIFOSX-126 - Objective 1 Complete - new permission regime implemented plus a more intuitive UI

This commit is contained in:
John Woodlock
2012-11-21 20:51:16 +00:00
parent 447b180790
commit 43fb5c3294
2 changed files with 121 additions and 74 deletions
@@ -0,0 +1,13 @@
package org.mifosng.platform.exceptions;
/**
* A {@link RuntimeException} thrown when permission resources are not found.
*/
public class PermissionNotFoundException extends
AbstractPlatformResourceNotFoundException {
public PermissionNotFoundException(String code) {
super("error.msg.permission.code.invalid", "Permission with Code "
+ code + " does not exist", code);
}
}
@@ -7,6 +7,7 @@ import java.util.Map;
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand; import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
import org.mifosng.platform.api.commands.RoleCommand; import org.mifosng.platform.api.commands.RoleCommand;
import org.mifosng.platform.exceptions.PermissionNotFoundException;
import org.mifosng.platform.exceptions.RoleNotFoundException; import org.mifosng.platform.exceptions.RoleNotFoundException;
import org.mifosng.platform.security.PlatformSecurityContext; import org.mifosng.platform.security.PlatformSecurityContext;
import org.mifosng.platform.user.domain.Permission; import org.mifosng.platform.user.domain.Permission;
@@ -19,7 +20,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
@Service @Service
public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatformService { public class RoleWritePlatformServiceJpaRepositoryImpl implements
RoleWritePlatformService {
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
private final RoleRepository roleRepository; private final RoleRepository roleRepository;
@@ -27,7 +29,9 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf
private final PermissionRepository permissionRepository; private final PermissionRepository permissionRepository;
@Autowired @Autowired
public RoleWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final RoleRepository roleRepository, public RoleWritePlatformServiceJpaRepositoryImpl(
final PlatformSecurityContext context,
final RoleRepository roleRepository,
final PermissionRepository permissionRepository) { final PermissionRepository permissionRepository) {
this.context = context; this.context = context;
this.roleRepository = roleRepository; this.roleRepository = roleRepository;
@@ -43,9 +47,11 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf
RoleCommandValidator validator = new RoleCommandValidator(command); RoleCommandValidator validator = new RoleCommandValidator(command);
validator.validateForCreate(); validator.validateForCreate();
List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions()); List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command
.getPermissions());
Role entity = new Role(command.getName(), command.getDescription(), selectedPermissions); Role entity = new Role(command.getName(), command.getDescription(),
selectedPermissions);
this.roleRepository.save(entity); this.roleRepository.save(entity);
@@ -61,10 +67,13 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf
RoleCommandValidator validator = new RoleCommandValidator(command); RoleCommandValidator validator = new RoleCommandValidator(command);
validator.validateForUpdate(); validator.validateForUpdate();
List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions()); List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command
.getPermissions());
Role role = this.roleRepository.findOne(command.getId()); Role role = this.roleRepository.findOne(command.getId());
if (role == null) { throw new RoleNotFoundException(command.getId()); } if (role == null) {
throw new RoleNotFoundException(command.getId());
}
role.update(command, selectedPermissions); role.update(command, selectedPermissions);
this.roleRepository.save(role); this.roleRepository.save(role);
@@ -77,30 +86,54 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf
public Long updateRolePermissions(final RolePermissionCommand command) { public Long updateRolePermissions(final RolePermissionCommand command) {
context.authenticatedUser(); context.authenticatedUser();
// RoleCommandValidator validator = new RoleCommandValidator(command);
// validator.validateForUpdate();
final Role role = this.roleRepository.findOne(command.getRoleId()); final Role role = this.roleRepository.findOne(command.getRoleId());
if (role == null) { if (role == null) {
throw new RoleNotFoundException(command.getRoleId()); throw new RoleNotFoundException(command.getRoleId());
} }
Map<String, Boolean> permissions = command.getPermissions(); Collection<Permission> allPermissions = this.permissionRepository
for (String permissionCode : permissions.keySet()) { .findAll();
Boolean selected = permissions.get(permissionCode);
if (selected.booleanValue()) { Map<String, Boolean> commandPermissions = command.getPermissions();
// this.permissionRepository.findOne(id) for (String permissionCode : commandPermissions.keySet()) {
} Boolean selected = commandPermissions.get(permissionCode);
Permission permission = getPermissionByCode(allPermissions,
permissionCode);
if (role.getPermissions().contains(permission)) {
if (!(selected)) {
role.getPermissions().remove(permission);
} }
// role.update(command, selectedPermissions); } else {
if (selected) {
role.getPermissions().add(permission);
}
}
}
this.roleRepository.save(role); this.roleRepository.save(role);
return role.getId(); return role.getId();
} }
private List<Permission> assembleListOfSelectedPermissions(final String[] selectedPermissionsArray) { private Permission getPermissionByCode(
Collection<Permission> allPermissions, String permissionCode) {
if (allPermissions != null) {
for (Permission permission : allPermissions) {
if (permission.code().equals(permissionCode)) return permission;
}
}
throw new PermissionNotFoundException(permissionCode);
}
private List<Permission> assembleListOfSelectedPermissions(
final String[] selectedPermissionsArray) {
List<Long> selectedPermissionIds = new ArrayList<Long>(); List<Long> selectedPermissionIds = new ArrayList<Long>();
List<Permission> selectedPermissions = new ArrayList<Permission>(); List<Permission> selectedPermissions = new ArrayList<Permission>();
@@ -109,7 +142,8 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf
selectedPermissionIds.add(Long.valueOf(selectedId)); selectedPermissionIds.add(Long.valueOf(selectedId));
} }
Collection<Permission> allPermissions = this.permissionRepository.findAll(); Collection<Permission> allPermissions = this.permissionRepository
.findAll();
for (Permission permission : allPermissions) { for (Permission permission : allPermissions) {
if (selectedPermissionIds.contains(permission.getId())) { if (selectedPermissionIds.contains(permission.getId())) {
selectedPermissions.add(permission); selectedPermissions.add(permission);