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.commands.RoleCommand;
|
||||||
import org.mifosng.platform.api.data.EntityIdentifier;
|
import org.mifosng.platform.api.data.EntityIdentifier;
|
||||||
import org.mifosng.platform.api.data.PermissionData;
|
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.RoleData;
|
||||||
|
import org.mifosng.platform.api.data.RolePermissionData;
|
||||||
import org.mifosng.platform.api.infrastructure.PortfolioApiDataConversionService;
|
import org.mifosng.platform.api.infrastructure.PortfolioApiDataConversionService;
|
||||||
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
|
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
|
||||||
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
|
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
|
||||||
@@ -138,37 +140,23 @@ public class RolesApiResource {
|
|||||||
|
|
||||||
return this.apiJsonSerializerService.serializeEntityIdentifier(new EntityIdentifier(roleId));
|
return this.apiJsonSerializerService.serializeEntityIdentifier(new EntityIdentifier(roleId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@GET
|
@GET
|
||||||
@Path("{roleId}/permissions")
|
@Path("{roleId}/permissions")
|
||||||
@Consumes({MediaType.APPLICATION_JSON})
|
@Consumes({MediaType.APPLICATION_JSON})
|
||||||
@Produces({MediaType.APPLICATION_JSON})
|
@Produces({MediaType.APPLICATION_JSON})
|
||||||
public String retrieveRolePermissions(@PathParam("roleId") final Long roleId, @Context final UriInfo uriInfo) {
|
public String retrieveRolePermissions(@PathParam("roleId") final Long roleId, @Context final UriInfo uriInfo) {
|
||||||
|
|
||||||
context.authenticatedUser().validateHasReadPermission(entityType);
|
context.authenticatedUser().validateHasReadPermission(entityType);
|
||||||
|
|
||||||
Set<String> typicalResponseParameters = new HashSet<String>(Arrays.asList("id", "name", "description", jpw));
|
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
|
||||||
|
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
|
||||||
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());
|
|
||||||
|
|
||||||
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
|
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
|
||||||
|
Collection<PermissionUsageData> permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId);
|
||||||
if (template) {
|
RolePermissionData rolePermissionData = new RolePermissionData(role.getId(), role.getName(), role.getDescription(), permissionUsageData);
|
||||||
Collection<PermissionData> availablePermissions = this.permissionReadPlatformService.retrieveAllPermissions();
|
|
||||||
availablePermissions.removeAll(role.getSelectedPermissions());
|
|
||||||
|
|
||||||
role = new RoleData(role, availablePermissions);
|
return this.apiJsonSerializerService.serializeRolePermissionDataToJson(prettyPrint, responseParameters, rolePermissionData);
|
||||||
|
|
||||||
responseParameters.add("availablePermissions");
|
|
||||||
responseParameters.add("selectedPermissions");
|
|
||||||
}
|
|
||||||
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
@@ -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() {
|
public Collection<PermissionData> selectedPermissions() {
|
||||||
return this.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.OfficeTransactionData;
|
||||||
import org.mifosng.platform.api.data.PermissionData;
|
import org.mifosng.platform.api.data.PermissionData;
|
||||||
import org.mifosng.platform.api.data.RoleData;
|
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.SavingAccountData;
|
||||||
import org.mifosng.platform.api.data.SavingProductData;
|
import org.mifosng.platform.api.data.SavingProductData;
|
||||||
import org.mifosng.platform.api.data.StaffData;
|
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>(
|
private static final Set<String> ROLE_DATA_PARAMETERS = new HashSet<String>(
|
||||||
Arrays.asList("id", "name", "description", "availablePermissions",
|
Arrays.asList("id", "name", "description", "availablePermissions",
|
||||||
"selectedPermissions"));
|
"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>(
|
private static final Set<String> APP_USER_DATA_PARAMETERS = new HashSet<String>(
|
||||||
Arrays.asList("id", "officeId", "officeName", "username",
|
Arrays.asList("id", "officeId", "officeName", "username",
|
||||||
"firstname", "lastname", "email", "allowedOffices",
|
"firstname", "lastname", "email", "allowedOffices",
|
||||||
@@ -297,6 +300,16 @@ public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApi
|
|||||||
return helper.serializedJsonFrom(gsonDeserializer, role);
|
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
|
@Override
|
||||||
public String serializeAppUserDataToJson(final boolean prettyPrint,
|
public String serializeAppUserDataToJson(final boolean prettyPrint,
|
||||||
final Set<String> responseParameters,
|
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.OfficeTransactionData;
|
||||||
import org.mifosng.platform.api.data.PermissionData;
|
import org.mifosng.platform.api.data.PermissionData;
|
||||||
import org.mifosng.platform.api.data.RoleData;
|
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.SavingAccountData;
|
||||||
import org.mifosng.platform.api.data.SavingProductData;
|
import org.mifosng.platform.api.data.SavingProductData;
|
||||||
import org.mifosng.platform.api.data.StaffData;
|
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, Collection<RoleData> roles);
|
||||||
|
|
||||||
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, RoleData role);
|
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);
|
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 java.util.Collection;
|
||||||
|
|
||||||
import org.mifosng.platform.api.data.PermissionData;
|
import org.mifosng.platform.api.data.PermissionData;
|
||||||
|
import org.mifosng.platform.api.data.PermissionUsageData;
|
||||||
|
|
||||||
public interface PermissionReadPlatformService {
|
public interface PermissionReadPlatformService {
|
||||||
|
|
||||||
Collection<PermissionData> retrieveAllPermissions();
|
Collection<PermissionData> retrieveAllPermissions();
|
||||||
|
|
||||||
|
Collection<PermissionUsageData> retrieveAllRolePermissions(Long roleId);
|
||||||
}
|
}
|
||||||
+32
@@ -5,6 +5,7 @@ import java.sql.SQLException;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.mifosng.platform.api.data.PermissionData;
|
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.JdbcSupport;
|
||||||
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
|
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
|
||||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
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 ";
|
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