remove remaining old permissions code and update api docs for roles and permissions

This commit is contained in:
John Woodlock
2012-11-23 14:22:33 +00:00
parent f7c7bfdd5f
commit 10c343373c
13 changed files with 239 additions and 348 deletions
@@ -11,7 +11,7 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
import org.mifosng.platform.security.PlatformSecurityContext;
@@ -46,7 +46,7 @@ public class PermissionsApiResource {
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final Collection<PermissionData> permissions = this.permissionReadPlatformService.retrieveAllPermissions();
final Collection<PermissionUsageData> permissions = this.permissionReadPlatformService.retrieveAllPermissions();
return this.apiJsonSerializerService.serializePermissionDataToJson(prettyPrint, responseParameters, permissions);
}
@@ -18,7 +18,6 @@ import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
import org.mifosng.platform.api.data.CommandSourceData;
import org.mifosng.platform.api.data.EntityIdentifier;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.RolePermissionsData;
@@ -77,24 +76,6 @@ public class RolesApiResource {
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, roles);
}
@GET
@Path("template")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String retrieveRoleTemplate(@Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final Collection<PermissionData> allPermissions = this.permissionReadPlatformService.retrieveAllPermissions();
final RoleData role = new RoleData(allPermissions, new ArrayList<PermissionData>());
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
}
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@@ -123,16 +104,10 @@ public class RolesApiResource {
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters());
final Long commandId = ApiParameterHelper.commandId(uriInfo.getQueryParameters());
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
if (template) {
final Collection<PermissionData> availablePermissions = this.permissionReadPlatformService.retrieveAllPermissions();
availablePermissions.removeAll(role.selectedPermissions());
role = new RoleData(role, availablePermissions);
}
if (commandId != null) {
// currentChanges = handleRequestToIntegrateProposedChangesFromCommand(roleId, commandId);
}
@@ -1,33 +0,0 @@
package org.mifosng.platform.api.data;
/**
* Immutable data object for permission data.
*/
public class PermissionData {
@SuppressWarnings("unused")
private final Long id;
@SuppressWarnings("unused")
private final String name;
@SuppressWarnings("unused")
private final String description;
private final String code;
public PermissionData(final Long id, final String name, final String description, final String code) {
this.id = id;
this.name = name;
this.description = description;
this.code = code;
}
@Override
public boolean equals(Object obj) {
PermissionData data = (PermissionData) obj;
return this.code.equalsIgnoreCase(data.code);
}
@Override
public int hashCode() {
return this.code.hashCode();
}
}
@@ -5,27 +5,31 @@ package org.mifosng.platform.api.data;
*/
public class PermissionUsageData {
@SuppressWarnings("unused")
private final String grouping;
@SuppressWarnings("unused")
private final String code;
@SuppressWarnings("unused")
private final String entityName;
@SuppressWarnings("unused")
private final String actionName;
@SuppressWarnings("unused")
private final Boolean selected;
@SuppressWarnings("unused")
private final String grouping;
@SuppressWarnings("unused")
private final String code;
@SuppressWarnings("unused")
private final String entityName;
@SuppressWarnings("unused")
private final String actionName;
@SuppressWarnings("unused")
private final Boolean selected;
@SuppressWarnings("unused")
private final Boolean isMakerChecker;
public static PermissionUsageData from(final String permissionCode, final boolean isSelected) {
return new PermissionUsageData(null, permissionCode, null, null, isSelected);
return new PermissionUsageData(null, permissionCode, null, null, isSelected, null);
}
public PermissionUsageData(final String grouping, final String code, final String entityName, final String actionName,
final Boolean selected) {
this.grouping = grouping;
this.code = code;
this.entityName = entityName;
this.actionName = actionName;
this.selected = selected;
}
public PermissionUsageData(final String grouping, final String code,
final String entityName, final String actionName,
final Boolean selected, final Boolean isMakerChecker) {
this.grouping = grouping;
this.code = code;
this.entityName = entityName;
this.actionName = actionName;
this.selected = selected;
this.isMakerChecker = isMakerChecker;
}
}
@@ -1,6 +1,5 @@
package org.mifosng.platform.api.data;
import java.util.ArrayList;
import java.util.Collection;
/**
@@ -11,10 +10,6 @@ public class RoleData {
private final Long id;
private final String name;
private final String description;
@SuppressWarnings("unused")
private final Collection<PermissionData> availablePermissions;
private final Collection<PermissionData> selectedPermissions;
// @SuppressWarnings("unused")
// private final Collection<RoleData> currentChanges;
@@ -23,32 +18,18 @@ public class RoleData {
this.id = id;
this.name = name;
this.description = description;
this.availablePermissions = null;
this.selectedPermissions = null;
}
public RoleData(final Long id, final String name, final String description, final Collection<PermissionData> selectedPermissions) {
this.id = id;
this.name = name;
this.description = description;
this.availablePermissions = null;
this.selectedPermissions = selectedPermissions;
}
public RoleData(final Collection<PermissionData> availablePermissions, final Collection<PermissionData> selectedPermissions) {
public RoleData() {
this.id = null;
this.name = null;
this.description = null;
this.availablePermissions = new ArrayList<PermissionData>(availablePermissions);
this.selectedPermissions = new ArrayList<PermissionData>(selectedPermissions);
}
public RoleData(final RoleData role, final Collection<PermissionData> availablePermissions) {
public RoleData(final RoleData role) {
this.id = role.id;
this.name = role.name;
this.description = role.description;
this.availablePermissions = availablePermissions;
this.selectedPermissions = role.selectedPermissions;
}
@Override
@@ -62,10 +43,6 @@ public class RoleData {
return this.id.hashCode();
}
public Collection<PermissionData> selectedPermissions() {
return this.selectedPermissions;
}
public RolePermissionsData toRolePermissionData(final Collection<PermissionUsageData> permissionUsageData,
final Collection<PermissionUsageData> currentChanges,
final Collection<Collection<PermissionUsageData>> allChanges) {
@@ -14,6 +14,7 @@ import org.mifosng.platform.api.data.ClientAccountSummaryCollectionData;
import org.mifosng.platform.api.data.ClientData;
import org.mifosng.platform.api.data.ClientIdentifierData;
import org.mifosng.platform.api.data.CodeData;
import org.mifosng.platform.api.data.CommandSourceData;
import org.mifosng.platform.api.data.ConfigurationData;
import org.mifosng.platform.api.data.DatatableData;
import org.mifosng.platform.api.data.DepositAccountData;
@@ -31,11 +32,10 @@ import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.LoanReassignmentData;
import org.mifosng.platform.api.data.LoanScheduleData;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.CommandSourceData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.RolePermissionsData;
import org.mifosng.platform.api.data.SavingAccountData;
@@ -54,7 +54,7 @@ import com.google.gson.Gson;
@Service
public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApiJsonSerializerService {
private static final Set<String> PERMISSION_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "description", "code"));
private static final Set<String> PERMISSION_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("grouping", "code", "entityName", "actionName", "selected", "isMakerChecker"));
private static final Set<String> ROLE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "description",
"availablePermissions", "selectedPermissions"));
private static final Set<String> ROLE_PERMISSION_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "description",
@@ -203,10 +203,10 @@ public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApi
@Override
public String serializePermissionDataToJson(final boolean prettyPrint, final Set<String> responseParameters,
final Collection<PermissionData> permissions) {
final Collection<PermissionUsageData> permissions) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(PERMISSION_DATA_PARAMETERS,
prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, permissions.toArray(new PermissionData[permissions.size()]));
return helper.serializedJsonFrom(gsonDeserializer, permissions.toArray(new PermissionUsageData[permissions.size()]));
}
@Override
@@ -33,7 +33,7 @@ import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.RolePermissionsData;
import org.mifosng.platform.api.data.SavingAccountData;
@@ -48,7 +48,7 @@ public interface PortfolioApiJsonSerializerService {
String serializeDatatableDataToJson(boolean prettyPrint, Collection<DatatableData> result);
String serializePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<PermissionData> permissions);
String serializePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<PermissionUsageData> permissions);
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<RoleData> roles);
@@ -4,7 +4,6 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.mifosng.platform.api.data.PermissionData;
import org.springframework.data.jpa.domain.AbstractPersistable;
@Entity
@@ -18,12 +17,6 @@ public class Permission extends AbstractPersistable<Long> {
@Column(name = "code", nullable = false, length = 100)
private final String code;
@Column(name = "default_name", nullable = false, length = 100)
private final String defaultName;
@Column(name = "default_description", nullable = false, length = 500)
private final String defaultDescription;
@SuppressWarnings("unused")
@Column(name = "entity_name", nullable = true, length = 100)
private final String entityName;
@@ -31,12 +24,15 @@ public class Permission extends AbstractPersistable<Long> {
@SuppressWarnings("unused")
@Column(name = "action_name", nullable = true, length = 100)
private final String actionName;
@SuppressWarnings("unused")
@Column(name = "is_maker_checker", nullable = false)
private Boolean isMakerChecker;
protected Permission() {
this.grouping = null;
this.code = null;
this.defaultDescription = null;
this.defaultName = null;
this.entityName = null;
this.actionName = null;
}
@@ -49,7 +45,4 @@ public class Permission extends AbstractPersistable<Long> {
return this.code;
}
public PermissionData toData() {
return new PermissionData(this.getId(), this.defaultName, this.defaultDescription, this.code);
}
}
@@ -1,6 +1,5 @@
package org.mifosng.platform.user.domain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -14,7 +13,6 @@ import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.mifosng.platform.api.commands.RoleCommand;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.infrastructure.AbstractAuditableCustom;
@@ -75,13 +73,6 @@ public class Role extends AbstractAuditableCustom<AppUser, Long> {
}
public RoleData toData() {
final Collection<PermissionData> rolePermissions = new ArrayList<PermissionData>(this.permissions.size());
for (Permission permission : this.permissions) {
PermissionData permissionData = permission.toData();
rolePermissions.add(permissionData);
}
return new RoleData(this.getId(), this.name, this.description, rolePermissions);
return new RoleData(this.getId(), this.name, this.description);
}
}
@@ -2,12 +2,11 @@ package org.mifosng.platform.user.service;
import java.util.Collection;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
public interface PermissionReadPlatformService {
Collection<PermissionData> retrieveAllPermissions();
Collection<PermissionUsageData> retrieveAllPermissions();
Collection<PermissionUsageData> retrieveAllRolePermissions(Long roleId);
Collection<PermissionUsageData> retrieveAllRolePermissions(Long roleId);
}
@@ -4,9 +4,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.infrastructure.JdbcSupport;
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
import org.mifosng.platform.security.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,39 +25,22 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform
}
@Override
public Collection<PermissionData> retrieveAllPermissions() {
public Collection<PermissionUsageData> retrieveAllPermissions() {
context.authenticatedUser();
final PermissionMapper mapper = new PermissionMapper();
final String sql = "select " + mapper.schema() + " order by p.id";
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
final String sql = mapper.permissionSchema();
return this.jdbcTemplate.query(sql, mapper, new Object[] {});
}
private static final class PermissionMapper implements RowMapper<PermissionData> {
@Override
public PermissionData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final Long id = JdbcSupport.getLong(rs, "id");
final String name = rs.getString("name");
final String description = rs.getString("description");
final String code = rs.getString("code");
return new PermissionData(id, name, description, code);
}
public String schema() {
return " p.id as id, p.default_name as name, p.default_description as description, p.code as code from m_permission p ";
}
}
@Override
public Collection<PermissionUsageData> retrieveAllRolePermissions(final Long roleId) {
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
final String sql = mapper.schema();
final String sql = mapper.rolePermissionSchema();
return this.jdbcTemplate.query(sql, mapper, new Object[] { roleId });
}
@@ -74,15 +55,23 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform
final String entityName = rs.getString("entityName");
final String actionName = rs.getString("actionName");
final Boolean selected = rs.getBoolean("selected");
final Boolean isMakerChecker = rs.getBoolean("isMakerChecker");
return new PermissionUsageData(grouping, code, entityName, actionName, selected);
return new PermissionUsageData(grouping, code, entityName, actionName, selected, isMakerChecker);
}
public String schema() {
return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, if(isnull(rp.role_id), false, true) as selected "
+ "from m_permission p "
+ "left join m_role_permission rp on rp.permission_id = p.id and rp.role_id = ? "
+ "order by p.grouping, ifnull(entity_name, ''), p.code";
public String permissionSchema() {
return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, true as selected, p.is_maker_checker as isMakerChecker"
+ " from m_permission p "
+ " order by p.grouping, ifnull(entity_name, ''), p.code";
}
public String rolePermissionSchema() {
return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, if(isnull(rp.role_id), false, true) as selected, "
+ " if(isnull(rp.role_id), false, p.is_maker_checker) as isMakerChecker "
+ " from m_permission p "
+ " left join m_role_permission rp on rp.permission_id = p.id and rp.role_id = ? "
+ " order by p.grouping, ifnull(entity_name, ''), p.code";
}
}