WIP permissions - add new api to get role permissions

This commit is contained in:
John Woodlock
2012-11-16 22:42:25 +00:00
parent bf847dc352
commit 35a331debd
8 changed files with 140 additions and 22 deletions
@@ -18,7 +18,9 @@ import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.api.commands.RoleCommand;
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.RolePermissionData;
import org.mifosng.platform.api.infrastructure.PortfolioApiDataConversionService;
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
@@ -138,37 +140,23 @@ public class RolesApiResource {
return this.apiJsonSerializerService.serializeEntityIdentifier(new EntityIdentifier(roleId));
}
/*
@GET
@Path("{roleId}/permissions")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String retrieveRolePermissions(@PathParam("roleId") final Long roleId, @Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(entityType);
Set<String> typicalResponseParameters = new HashSet<String>(Arrays.asList("id", "name", "description", jpw));
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) {
responseParameters.addAll(typicalResponseParameters);
}
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters());
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
if (template) {
Collection<PermissionData> availablePermissions = this.permissionReadPlatformService.retrieveAllPermissions();
availablePermissions.removeAll(role.getSelectedPermissions());
Collection<PermissionUsageData> permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId);
RolePermissionData rolePermissionData = new RolePermissionData(role.getId(), role.getName(), role.getDescription(), permissionUsageData);
role = new RoleData(role, availablePermissions);
responseParameters.add("availablePermissions");
responseParameters.add("selectedPermissions");
}
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
return this.apiJsonSerializerService.serializeRolePermissionDataToJson(prettyPrint, responseParameters, rolePermissionData);
}
*/
}
@@ -0,0 +1,28 @@
package org.mifosng.platform.api.data;
public class PermissionUsageData {
private final String grouping;
private final String code;
private final Boolean selected;
public PermissionUsageData(final String grouping, final String code,
final Boolean selected) {
this.grouping = grouping;
this.code = code;
this.selected = selected;
}
public String getGrouping() {
return grouping;
}
public String getCode() {
return code;
}
public Boolean getSelected() {
return selected;
}
}
@@ -61,4 +61,17 @@ public class RoleData {
public Collection<PermissionData> selectedPermissions() {
return this.selectedPermissions;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
@@ -0,0 +1,38 @@
package org.mifosng.platform.api.data;
import java.util.Collection;
public class RolePermissionData {
private final Long id;
private final String name;
private final String description;
private final Collection<PermissionUsageData> permissionUsageData;
public RolePermissionData(final Long id, final String name,
final String description,
final Collection<PermissionUsageData> permissionUsageData) {
this.id = id;
this.name = name;
this.description = description;
this.permissionUsageData = permissionUsageData;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public Collection<PermissionUsageData> getPermissionUsageData() {
return permissionUsageData;
}
}
@@ -36,6 +36,7 @@ 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.RoleData;
import org.mifosng.platform.api.data.RolePermissionData;
import org.mifosng.platform.api.data.SavingAccountData;
import org.mifosng.platform.api.data.SavingProductData;
import org.mifosng.platform.api.data.StaffData;
@@ -57,6 +58,8 @@ public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApi
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", "permissionUsageData"));
private static final Set<String> APP_USER_DATA_PARAMETERS = new HashSet<String>(
Arrays.asList("id", "officeId", "officeName", "username",
"firstname", "lastname", "email", "allowedOffices",
@@ -297,6 +300,16 @@ public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApi
return helper.serializedJsonFrom(gsonDeserializer, role);
}
@Override
public String serializeRolePermissionDataToJson(final boolean prettyPrint,
final Set<String> responseParameters,
final RolePermissionData rolePermissionData) {
final Gson gsonDeserializer = helper
.createGsonBuilderWithParameterExclusionSerializationStrategy(
ROLE_PERMISSION_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, rolePermissionData);
}
@Override
public String serializeAppUserDataToJson(final boolean prettyPrint,
final Set<String> responseParameters,
@@ -34,6 +34,7 @@ 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.RoleData;
import org.mifosng.platform.api.data.RolePermissionData;
import org.mifosng.platform.api.data.SavingAccountData;
import org.mifosng.platform.api.data.SavingProductData;
import org.mifosng.platform.api.data.StaffData;
@@ -53,6 +54,8 @@ public interface PortfolioApiJsonSerializerService {
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<RoleData> roles);
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, RoleData role);
String serializeRolePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, RolePermissionData rolePermissionData);
String serializeAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<AppUserData> users);
@@ -3,8 +3,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> retrieveAllRolePermissions(Long roleId);
}
@@ -5,6 +5,7 @@ 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;
@@ -53,4 +54,35 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform
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(Long roleId) {
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
final String sql = mapper.schema();
return this.jdbcTemplate.query(sql, mapper, new Object[] {roleId});
}
private static final class PermissionUsageDataMapper implements RowMapper<PermissionUsageData> {
@Override
public PermissionUsageData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final String grouping = rs.getString("grouping");
final String code = rs.getString("code");
final Boolean selected = rs.getBoolean("selected");
return new PermissionUsageData(grouping, code, selected);
}
public String schema() {
return " select p.grouping, p.code, 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, p.order_in_grouping, p.code ";
}
}
}