WIP permissions - add new api to get role permissions
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+13
@@ -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,
|
||||
|
||||
+3
@@ -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
@@ -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);
|
||||
}
|
||||
+32
@@ -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 ";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user