diff --git a/mifosng-data/src/main/java/org/mifosng/data/command/RoleCommand.java b/mifosng-data/src/main/java/org/mifosng/data/command/RoleCommand.java index 9f799e073..f8d50749b 100644 --- a/mifosng-data/src/main/java/org/mifosng/data/command/RoleCommand.java +++ b/mifosng-data/src/main/java/org/mifosng/data/command/RoleCommand.java @@ -12,10 +12,9 @@ public class RoleCommand { private String name; private String description; - private String[] notSelectedPermissions; private String[] permissions; - protected RoleCommand() { + public RoleCommand() { // } @@ -49,14 +48,6 @@ public class RoleCommand { this.id = id; } - public String[] getNotSelectedPermissions() { - return notSelectedPermissions; - } - - public void setNotSelectedPermissions(String[] notSelectedPermissions) { - this.notSelectedPermissions = notSelectedPermissions; - } - public String[] getPermissions() { return permissions; } diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/userhome.jsp b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/userhome.jsp index a9a1172c1..234fd27b4 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/userhome.jsp +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/admin/userhome.jsp @@ -159,20 +159,25 @@ $(document).ready(function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { - if (o[this.name] !== undefined) { - if (!o[this.name].push) { - o[this.name] = [o[this.name]]; - } - o[this.name].push(this.value || ''); - } else { - - if (this.name === 'permissions' || this.name === 'notSelectedPermissions' || this.name === 'roles' || this.name === 'notSelectedRoles') { - o[this.name] = new Array(); - o[this.name].push(this.value || ''); - } else { - o[this.name] = this.value || ''; - } - } + + if (this.name === 'notSelectedPermissions' || this.name === 'notSelectedRoles') { + // do not serialize + } else { + if (o[this.name] !== undefined) { + if (!o[this.name].push) { + o[this.name] = [o[this.name]]; + } + o[this.name].push(this.value || ''); + } else { + + if (this.name === 'permissions' || this.name === 'roles') { + o[this.name] = new Array(); + o[this.name].push(this.value || ''); + } else { + o[this.name] = this.value || ''; + } + } + } }); return o; }; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/DataValidatorBuilder.java b/mifosng-provider/src/main/java/org/mifosng/platform/DataValidatorBuilder.java index 013a122f2..0d9eb148a 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/DataValidatorBuilder.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/DataValidatorBuilder.java @@ -86,7 +86,7 @@ public class DataValidatorBuilder { return this; } - if (StringUtils.isBlank(value.toString())) { + if (value == null || StringUtils.isBlank(value.toString())) { StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(resource).append(".").append(parameter).append(".cannot.be.blank"); StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(parameter).append(" cannot be blank."); ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), parameter); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/RoleNotFoundException.java b/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/RoleNotFoundException.java new file mode 100644 index 000000000..00c64d4c7 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/RoleNotFoundException.java @@ -0,0 +1,11 @@ +package org.mifosng.platform.exceptions; + +/** + * A {@link RuntimeException} thrown when role resources are not found. + */ +public class RoleNotFoundException extends PlatformResourceNotFoundException { + + public RoleNotFoundException(Long id) { + super("error.msg.role.id.invalid", "Role with identifier " + id + " does not exist", id); + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/UserNotFoundException.java b/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/UserNotFoundException.java new file mode 100644 index 000000000..13aaafb56 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/exceptions/UserNotFoundException.java @@ -0,0 +1,11 @@ +package org.mifosng.platform.exceptions; + +/** + * A {@link RuntimeException} thrown when user resources are not found. + */ +public class UserNotFoundException extends PlatformResourceNotFoundException { + + public UserNotFoundException(Long id) { + super("error.msg.user.id.invalid", "User with identifier " + id + " does not exist", id); + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java index 8cdc2e2a3..08d83d681 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java @@ -91,7 +91,7 @@ public class Role extends AbstractAuditableCustom { if (description != null) { this.description = description; } - if (selectedPermissions != null) { + if (!selectedPermissions.isEmpty()) { this.permissions.clear(); this.permissions = new HashSet(selectedPermissions); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/AppUserReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/AppUserReadPlatformServiceImpl.java index c81b52331..f4c7c4633 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/AppUserReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/AppUserReadPlatformServiceImpl.java @@ -15,7 +15,7 @@ import org.mifosng.data.AppUserData; import org.mifosng.data.OfficeData; import org.mifosng.data.OfficeLookup; import org.mifosng.data.RoleData; -import org.mifosng.platform.exceptions.PlatformResourceNotFoundException; +import org.mifosng.platform.exceptions.RoleNotFoundException; import org.mifosng.platform.infrastructure.JdbcSupport; import org.mifosng.platform.organisation.service.OfficeReadPlatformService; import org.mifosng.platform.security.PlatformSecurityContext; @@ -102,7 +102,7 @@ public class AppUserReadPlatformServiceImpl implements AppUserReadPlatformServic AppUser user = this.appUserRepository.findOne(usersThatMatch(currentUser.getOrganisation(), userId)); if (user == null) { - throw new PlatformResourceNotFoundException("error.msg.user.id.invalid", "User with identifier {0} does not exist.", userId); + throw new RoleNotFoundException(userId); } List userRoleData = new ArrayList(); @@ -161,8 +161,7 @@ public class AppUserReadPlatformServiceImpl implements AppUserReadPlatformServic return " u.id as id, u.username as username, u.firstname as firstname, u.lastname as lastname, u.email as email, u.org_id as orgId, u.office_id as officeId from admin_appuser u "; } - private String fromOfficeList(final List officeList, - final Long officeId) { + private String fromOfficeList(final List officeList, final Long officeId) { String match = ""; for (OfficeData office : officeList) { if (office.getId().equals(officeId)) { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java index c2c0c4c04..b109e8639 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java @@ -1,5 +1,7 @@ package org.mifosng.platform.user.service; +import static org.mifosng.platform.Specifications.rolesThatMatch; + import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; @@ -7,6 +9,7 @@ import java.util.Collection; import javax.sql.DataSource; import org.mifosng.data.RoleData; +import org.mifosng.platform.exceptions.RoleNotFoundException; import org.mifosng.platform.infrastructure.JdbcSupport; import org.mifosng.platform.security.PlatformSecurityContext; import org.mifosng.platform.user.domain.AppUser; @@ -43,10 +46,13 @@ public class RoleReadPlatformServiceImpl implements RoleReadPlatformService { // FIXME - does it make sense to use JDBC over repository for this? @Override - public RoleData retrieveRole(Long roleId) { - - Role role = this.roleRepository.findOne(roleId); - + public RoleData retrieveRole(final Long id) { + AppUser currentUser = context.authenticatedUser(); + + Role role = this.roleRepository.findOne(rolesThatMatch(currentUser.getOrganisation(), id)); + if (role == null) { + throw new RoleNotFoundException(id); + } return role.toData(); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java index ebce919bf..788191fbd 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.List; import org.mifosng.data.command.RoleCommand; +import org.mifosng.platform.exceptions.RoleNotFoundException; import org.mifosng.platform.security.PlatformSecurityContext; import org.mifosng.platform.user.domain.AppUser; import org.mifosng.platform.user.domain.Permission; @@ -63,6 +64,9 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf List selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions()); Role role = this.roleRepository.findOne(rolesThatMatch(currentUser.getOrganisation(), command.getId())); + if (role == null) { + throw new RoleNotFoundException(command.getId()); + } role.update(command.getName(), command.getDescription(), selectedPermissions); this.roleRepository.save(role); @@ -78,7 +82,6 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf for (String selectedId : selectedPermissionsArray) { selectedPermissionIds.add(Long.valueOf(selectedId)); } - Collection allPermissions = this.permissionRepository.findAll(); for (Permission permission : allPermissions) {