add service to update can_maker_checker field on permissions
This commit is contained in:
+32
-2
@@ -5,17 +5,23 @@ import java.util.Set;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
|
||||
import org.mifosng.platform.api.commands.PermissionsCommand;
|
||||
import org.mifosng.platform.api.data.EntityIdentifier;
|
||||
import org.mifosng.platform.api.data.PermissionUsageData;
|
||||
import org.mifosng.platform.api.infrastructure.PortfolioApiDataConversionService;
|
||||
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
|
||||
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
|
||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||
import org.mifosng.platform.user.service.PermissionReadPlatformService;
|
||||
import org.mifosng.platform.user.service.PermissionWritePlatformService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -27,7 +33,13 @@ public class PermissionsApiResource {
|
||||
|
||||
@Autowired
|
||||
private PermissionReadPlatformService permissionReadPlatformService;
|
||||
|
||||
@Autowired
|
||||
private PermissionWritePlatformService permissionWritePlatformService;
|
||||
|
||||
@Autowired
|
||||
private PortfolioApiDataConversionService apiDataConversionService;
|
||||
|
||||
@Autowired
|
||||
private PortfolioApiJsonSerializerService apiJsonSerializerService;
|
||||
|
||||
@@ -43,11 +55,29 @@ public class PermissionsApiResource {
|
||||
|
||||
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
|
||||
|
||||
final boolean makerCheckerable = ApiParameterHelper.makerCheckerable(uriInfo.getQueryParameters());
|
||||
|
||||
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
|
||||
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
|
||||
|
||||
final Collection<PermissionUsageData> permissions = this.permissionReadPlatformService.retrieveAllPermissions();
|
||||
|
||||
Collection<PermissionUsageData> permissions = null;
|
||||
if (makerCheckerable) permissions = this.permissionReadPlatformService.retrieveAllMakerCheckerablePermissions();
|
||||
else permissions = this.permissionReadPlatformService.retrieveAllPermissions();
|
||||
|
||||
return this.apiJsonSerializerService.serializePermissionDataToJson(prettyPrint, responseParameters, permissions);
|
||||
}
|
||||
|
||||
|
||||
@PUT
|
||||
@Consumes({ MediaType.APPLICATION_JSON })
|
||||
@Produces({ MediaType.APPLICATION_JSON })
|
||||
public Response updatePermissionsDetails(final String jsonRequestBody) {
|
||||
|
||||
final PermissionsCommand command = this.apiDataConversionService.convertApiRequestJsonToPermissionsCommand(jsonRequestBody);
|
||||
|
||||
final Long entityId = this.permissionWritePlatformService.updateMakerCheckerPermissions(command);
|
||||
|
||||
return Response.ok().entity(new EntityIdentifier(entityId)).build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,8 +15,8 @@ import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.data.CommandSourceData;
|
||||
import org.mifosng.platform.api.data.EntityIdentifier;
|
||||
import org.mifosng.platform.api.data.PermissionUsageData;
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package org.mifosng.platform.api.commands;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Immutable command for updating permissions (initially maker-checker).
|
||||
*/
|
||||
public class PermissionsCommand {
|
||||
|
||||
private final Map<String, Boolean> permissions;
|
||||
|
||||
private final transient boolean makerCheckerApproval;
|
||||
|
||||
public PermissionsCommand(final Map<String, Boolean> permissionsMap, final boolean makerCheckerApproval) {
|
||||
this.permissions = permissionsMap;
|
||||
this.makerCheckerApproval = makerCheckerApproval;
|
||||
}
|
||||
|
||||
public Map<String, Boolean> getPermissions() {
|
||||
return this.permissions;
|
||||
}
|
||||
|
||||
public boolean isApprovedByChecker() {
|
||||
return this.makerCheckerApproval;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.mifosng.platform.accounting.api.commands;
|
||||
package org.mifosng.platform.api.commands;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
+2
-5
@@ -15,20 +15,17 @@ public class PermissionUsageData {
|
||||
private final String actionName;
|
||||
@SuppressWarnings("unused")
|
||||
private final Boolean selected;
|
||||
@SuppressWarnings("unused")
|
||||
private final Boolean canMakerChecker;
|
||||
|
||||
public static PermissionUsageData from(final String permissionCode, final boolean isSelected) {
|
||||
return new PermissionUsageData(null, permissionCode, null, null, isSelected, null);
|
||||
return new PermissionUsageData(null, permissionCode, null, null, isSelected);
|
||||
}
|
||||
|
||||
public PermissionUsageData(final String grouping, final String code, final String entityName, final String actionName,
|
||||
final Boolean selected, final Boolean canMakerChecker) {
|
||||
final Boolean selected) {
|
||||
this.grouping = grouping;
|
||||
this.code = code;
|
||||
this.entityName = entityName;
|
||||
this.actionName = actionName;
|
||||
this.selected = selected;
|
||||
this.canMakerChecker = canMakerChecker;
|
||||
}
|
||||
}
|
||||
+4
-1
@@ -1,6 +1,5 @@
|
||||
package org.mifosng.platform.api.infrastructure;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.AdjustLoanTransactionCommand;
|
||||
import org.mifosng.platform.api.commands.BranchMoneyTransferCommand;
|
||||
import org.mifosng.platform.api.commands.LoanReassignmentCommand;
|
||||
@@ -25,7 +24,9 @@ import org.mifosng.platform.api.commands.LoanTransactionCommand;
|
||||
import org.mifosng.platform.api.commands.NoteCommand;
|
||||
import org.mifosng.platform.api.commands.OfficeCommand;
|
||||
import org.mifosng.platform.api.commands.OrganisationCurrencyCommand;
|
||||
import org.mifosng.platform.api.commands.PermissionsCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.SavingAccountCommand;
|
||||
import org.mifosng.platform.api.commands.SavingProductCommand;
|
||||
import org.mifosng.platform.api.commands.StaffCommand;
|
||||
@@ -41,6 +42,8 @@ public interface PortfolioApiDataConversionService {
|
||||
OfficeCommand convertJsonToOfficeCommand(Long resourceIdentifier, String json);
|
||||
|
||||
RoleCommand convertApiRequestJsonToRoleCommand(Long resourceIdentifier, String json);
|
||||
|
||||
PermissionsCommand convertApiRequestJsonToPermissionsCommand(String jsonRequestBody);
|
||||
|
||||
RolePermissionCommand convertApiRequestJsonToRolePermissionCommand(Long roleId, String jsonRequestBody);
|
||||
|
||||
|
||||
+13
-1
@@ -17,7 +17,6 @@ import java.util.Set;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.AdjustLoanTransactionCommand;
|
||||
import org.mifosng.platform.api.commands.BranchMoneyTransferCommand;
|
||||
import org.mifosng.platform.api.commands.ChargeCommand;
|
||||
@@ -42,7 +41,9 @@ import org.mifosng.platform.api.commands.LoanTransactionCommand;
|
||||
import org.mifosng.platform.api.commands.NoteCommand;
|
||||
import org.mifosng.platform.api.commands.OfficeCommand;
|
||||
import org.mifosng.platform.api.commands.OrganisationCurrencyCommand;
|
||||
import org.mifosng.platform.api.commands.PermissionsCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.SavingAccountCommand;
|
||||
import org.mifosng.platform.api.commands.SavingProductCommand;
|
||||
import org.mifosng.platform.api.commands.StaffCommand;
|
||||
@@ -256,6 +257,17 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
|
||||
// command object
|
||||
return this.portfolioCommandDeserializerService.deserializeRoleCommand(resourceIdentifier, json, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PermissionsCommand convertApiRequestJsonToPermissionsCommand(final String json) {
|
||||
|
||||
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
|
||||
|
||||
final Type typeOfMap = new TypeToken<Map<String, Boolean>>() {}.getType();
|
||||
final Map<String, Boolean> permissionsMap = gsonConverter.fromJson(json, typeOfMap);
|
||||
|
||||
return new PermissionsCommand(permissionsMap, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RolePermissionCommand convertApiRequestJsonToRolePermissionCommand(final Long resourceIdentifier, final String json) {
|
||||
|
||||
+1
-1
@@ -4,9 +4,9 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.UserCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.infrastructure.api.JsonParserHelper;
|
||||
import org.mifosng.platform.infrastructure.errorhandling.InvalidJsonException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
package org.mifosng.platform.api.infrastructure;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.UserCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
|
||||
/**
|
||||
* Service for de-serializing JSON for a command into the platforms internal
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
package org.mifosng.platform.api.infrastructure;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.UserCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
|
||||
/**
|
||||
* Service for serializing commands into another format.
|
||||
|
||||
+1
-1
@@ -2,9 +2,9 @@ package org.mifosng.platform.api.infrastructure;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.UserCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.infrastructure.api.GoogleGsonSerializerHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package org.mifosng.platform.exceptions;
|
||||
|
||||
/**
|
||||
* A {@link RuntimeException} thrown when permission resources are not found.
|
||||
*/
|
||||
public class PermissionCantBeMakerCheckerableException extends
|
||||
AbstractPlatformResourceNotFoundException {
|
||||
|
||||
public PermissionCantBeMakerCheckerableException(String code) {
|
||||
super("error.msg.permission.code.not.makercheckerable", "Permission with Code "
|
||||
+ code + " can't be Maker Checkerable", code);
|
||||
}
|
||||
}
|
||||
+9
@@ -80,6 +80,15 @@ public class ApiParameterHelper {
|
||||
}
|
||||
return template;
|
||||
}
|
||||
|
||||
public static boolean makerCheckerable(final MultivaluedMap<String, String> queryParams) {
|
||||
boolean makerCheckerable = false;
|
||||
if (queryParams.getFirst("makerCheckerable") != null) {
|
||||
String prettyPrintValue = queryParams.getFirst("makerCheckerable");
|
||||
makerCheckerable = "true".equalsIgnoreCase(prettyPrintValue);
|
||||
}
|
||||
return makerCheckerable;
|
||||
}
|
||||
|
||||
public static boolean genericResultSet(final MultivaluedMap<String, String> queryParams) {
|
||||
boolean genericResultSet = false;
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
package org.mifosng.platform.makerchecker.service;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.infrastructure.PortfolioApiDataConversionService;
|
||||
import org.mifosng.platform.api.infrastructure.PortfolioCommandDeserializerService;
|
||||
import org.mifosng.platform.api.infrastructure.PortfolioCommandSerializerService;
|
||||
|
||||
+3
-3
@@ -6,12 +6,12 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
|
||||
public interface CodeWritePlatformService {
|
||||
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'ORGANISATION_ADMINISTRATION_SUPER_USER', 'CREATE_CODE')")
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'CREATE_CODE')")
|
||||
Long createCode(final CodeCommand command);
|
||||
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'ORGANISATION_ADMINISTRATION_SUPER_USER', 'UPDATE_CODE')")
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_CODE')")
|
||||
Long updateCode(final CodeCommand command);
|
||||
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE', 'DELETE_CODE')")
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'DELETE_CODE')")
|
||||
EntityIdentifier deleteCode(Long codeId);
|
||||
}
|
||||
@@ -172,7 +172,7 @@ public class AppUser extends AbstractAuditableCustom<AppUser, Long> implements P
|
||||
for (Role role : this.roles) {
|
||||
Collection<Permission> permissions = role.getPermissions();
|
||||
for (Permission permission : permissions) {
|
||||
grantedAuthorities.add(new SimpleGrantedAuthority(permission.code()));
|
||||
grantedAuthorities.add(new SimpleGrantedAuthority(permission.getCode()));
|
||||
}
|
||||
}
|
||||
return grantedAuthorities;
|
||||
|
||||
@@ -10,7 +10,6 @@ import org.springframework.data.jpa.domain.AbstractPersistable;
|
||||
@Table(name = "m_permission")
|
||||
public class Permission extends AbstractPersistable<Long> {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "grouping", nullable = false, length = 45)
|
||||
private final String grouping;
|
||||
|
||||
@@ -25,8 +24,9 @@ public class Permission extends AbstractPersistable<Long> {
|
||||
@Column(name = "action_name", nullable = true, length = 100)
|
||||
private final String actionName;
|
||||
|
||||
@Column(name = "can_maker_checker", nullable = false)
|
||||
private final boolean canMakerChecker;
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "can_maker_checker", nullable = false)
|
||||
private boolean canMakerChecker;
|
||||
|
||||
protected Permission() {
|
||||
this.grouping = null;
|
||||
@@ -40,11 +40,20 @@ public class Permission extends AbstractPersistable<Long> {
|
||||
return this.code.equalsIgnoreCase(checkCode);
|
||||
}
|
||||
|
||||
public String code() {
|
||||
public String getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public boolean hasMakerCheckerEnabled() {
|
||||
return this.canMakerChecker;
|
||||
}
|
||||
|
||||
public void setCanMakerChecker(Boolean canMakerChecker) {
|
||||
this.canMakerChecker = canMakerChecker;
|
||||
}
|
||||
|
||||
public String getGrouping() {
|
||||
return this.grouping;
|
||||
}
|
||||
|
||||
}
|
||||
+2
@@ -7,6 +7,8 @@ import org.mifosng.platform.api.data.PermissionUsageData;
|
||||
public interface PermissionReadPlatformService {
|
||||
|
||||
Collection<PermissionUsageData> retrieveAllPermissions();
|
||||
|
||||
Collection<PermissionUsageData> retrieveAllMakerCheckerablePermissions();
|
||||
|
||||
Collection<PermissionUsageData> retrieveAllRolePermissions(Long roleId);
|
||||
}
|
||||
+84
-44
@@ -7,70 +7,110 @@ import java.util.Collection;
|
||||
import org.mifosng.platform.api.data.PermissionUsageData;
|
||||
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
|
||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class PermissionReadPlatformServiceImpl implements PermissionReadPlatformService {
|
||||
public class PermissionReadPlatformServiceImpl implements
|
||||
PermissionReadPlatformService {
|
||||
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
private final PlatformSecurityContext context;
|
||||
private final static Logger logger = LoggerFactory
|
||||
.getLogger(PermissionReadPlatformService.class);
|
||||
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
@Autowired
|
||||
public PermissionReadPlatformServiceImpl(final PlatformSecurityContext context, final TenantAwareRoutingDataSource dataSource) {
|
||||
this.context = context;
|
||||
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
||||
}
|
||||
@Autowired
|
||||
public PermissionReadPlatformServiceImpl(
|
||||
final PlatformSecurityContext context,
|
||||
final TenantAwareRoutingDataSource dataSource) {
|
||||
this.context = context;
|
||||
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<PermissionUsageData> retrieveAllPermissions() {
|
||||
@Override
|
||||
public Collection<PermissionUsageData> retrieveAllPermissions() {
|
||||
|
||||
context.authenticatedUser();
|
||||
context.authenticatedUser();
|
||||
|
||||
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
|
||||
final String sql = mapper.permissionSchema();
|
||||
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
|
||||
final String sql = mapper.permissionSchema();
|
||||
logger.info("retrieveAllPermissions: " + sql);
|
||||
return this.jdbcTemplate.query(sql, mapper, new Object[] {});
|
||||
}
|
||||
|
||||
return this.jdbcTemplate.query(sql, mapper, new Object[] {});
|
||||
}
|
||||
@Override
|
||||
public Collection<PermissionUsageData> retrieveAllMakerCheckerablePermissions() {
|
||||
|
||||
@Override
|
||||
public Collection<PermissionUsageData> retrieveAllRolePermissions(final Long roleId) {
|
||||
context.authenticatedUser();
|
||||
|
||||
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
|
||||
final String sql = mapper.rolePermissionSchema();
|
||||
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
|
||||
final String sql = mapper.makerCheckerablePermissionSchema();
|
||||
logger.info("retrieveAllMakerCheckerablePermissions: " + sql);
|
||||
|
||||
return this.jdbcTemplate.query(sql, mapper, new Object[] { roleId });
|
||||
}
|
||||
return this.jdbcTemplate.query(sql, mapper, new Object[] {});
|
||||
}
|
||||
|
||||
private static final class PermissionUsageDataMapper implements RowMapper<PermissionUsageData> {
|
||||
@Override
|
||||
public Collection<PermissionUsageData> retrieveAllRolePermissions(
|
||||
final Long roleId) {
|
||||
|
||||
@Override
|
||||
public PermissionUsageData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
|
||||
final String sql = mapper.rolePermissionSchema();
|
||||
logger.info("retrieveAllRolePermissions: " + sql);
|
||||
|
||||
final String grouping = rs.getString("grouping");
|
||||
final String code = rs.getString("code");
|
||||
final String entityName = rs.getString("entityName");
|
||||
final String actionName = rs.getString("actionName");
|
||||
final Boolean selected = rs.getBoolean("selected");
|
||||
final Boolean canMakerChecker = rs.getBoolean("canMakerChecker");
|
||||
return this.jdbcTemplate.query(sql, mapper, new Object[] { roleId });
|
||||
}
|
||||
|
||||
return new PermissionUsageData(grouping, code, entityName, actionName, selected, canMakerChecker);
|
||||
}
|
||||
private static final class PermissionUsageDataMapper implements
|
||||
RowMapper<PermissionUsageData> {
|
||||
|
||||
public String permissionSchema() {
|
||||
return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, true as selected, p.can_maker_checker as canMakerChecker"
|
||||
+ " from m_permission p " + " order by p.grouping, ifnull(entity_name, ''), p.code";
|
||||
}
|
||||
@Override
|
||||
public PermissionUsageData mapRow(final ResultSet rs,
|
||||
@SuppressWarnings("unused") final int rowNum)
|
||||
throws SQLException {
|
||||
|
||||
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.can_maker_checker) as canMakerChecker "
|
||||
+ " 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";
|
||||
}
|
||||
}
|
||||
final String grouping = rs.getString("grouping");
|
||||
final String code = rs.getString("code");
|
||||
final String entityName = rs.getString("entityName");
|
||||
final String actionName = rs.getString("actionName");
|
||||
final Boolean selected = rs.getBoolean("selected");
|
||||
|
||||
return new PermissionUsageData(grouping, code, entityName,
|
||||
actionName, selected);
|
||||
}
|
||||
|
||||
public String permissionSchema() {
|
||||
/* get all non-CHECKER permissions */
|
||||
return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, true as selected"
|
||||
+ " from m_permission p "
|
||||
+ " where code not like '%\\_CHECKER'"
|
||||
+ " order by p.grouping, ifnull(entity_name, ''), p.code";
|
||||
}
|
||||
|
||||
public String makerCheckerablePermissionSchema() {
|
||||
/*
|
||||
* get all 'Maker-Checkerable' permissions - Maintenance permissions
|
||||
* (i.e. exclude the 'special' grouping, the READ permissions and
|
||||
* the CHECKER permissions
|
||||
*/
|
||||
|
||||
return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, p.can_maker_checker as selected"
|
||||
+ " from m_permission p "
|
||||
+ " where grouping != 'special' and code not like 'READ_%' and code not like '%\\_CHECKER'"
|
||||
+ " 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 "
|
||||
+ " 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";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package org.mifosng.platform.user.service;
|
||||
|
||||
|
||||
import org.mifosng.platform.api.commands.PermissionsCommand;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
|
||||
public interface PermissionWritePlatformService {
|
||||
|
||||
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'PERMISSIONS_ROLE')")
|
||||
Long updateMakerCheckerPermissions(PermissionsCommand command);
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
package org.mifosng.platform.user.service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import org.mifosng.platform.api.commands.PermissionsCommand;
|
||||
import org.mifosng.platform.exceptions.PermissionNotFoundException;
|
||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||
import org.mifosng.platform.user.domain.Permission;
|
||||
import org.mifosng.platform.user.domain.PermissionRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
public class PermissionWritePlatformServiceJpaRepositoryImpl implements
|
||||
PermissionWritePlatformService {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
private final PermissionRepository permissionRepository;
|
||||
|
||||
@Autowired
|
||||
public PermissionWritePlatformServiceJpaRepositoryImpl(
|
||||
final PlatformSecurityContext context,
|
||||
final PermissionRepository permissionRepository) {
|
||||
this.context = context;
|
||||
this.permissionRepository = permissionRepository;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long updateMakerCheckerPermissions(final PermissionsCommand command) {
|
||||
context.authenticatedUser();
|
||||
|
||||
final Collection<Permission> allPermissions = this.permissionRepository
|
||||
.findAll();
|
||||
|
||||
final Map<String, Boolean> commandPermissions = command
|
||||
.getPermissions();
|
||||
for (final String permissionCode : commandPermissions.keySet()) {
|
||||
|
||||
final Permission permission = findPermissionByCode(allPermissions,
|
||||
permissionCode);
|
||||
|
||||
if (permission.getCode().endsWith("_CHECKER")
|
||||
|| permission.getCode().startsWith("READ_")
|
||||
|| permission.getGrouping().equalsIgnoreCase("special")) {
|
||||
throw new PermissionNotFoundException(permissionCode);
|
||||
}
|
||||
|
||||
final boolean isSelected = commandPermissions.get(permissionCode)
|
||||
.booleanValue();
|
||||
permission.setCanMakerChecker(isSelected);
|
||||
|
||||
this.permissionRepository.save(permission);
|
||||
}
|
||||
|
||||
return new Long(0);
|
||||
}
|
||||
|
||||
private Permission findPermissionByCode(
|
||||
Collection<Permission> allPermissions, String permissionCode) {
|
||||
|
||||
if (allPermissions != null) {
|
||||
for (Permission permission : allPermissions) {
|
||||
if (permission.hasCode(permissionCode)) {
|
||||
return permission;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new PermissionNotFoundException(permissionCode);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package org.mifosng.platform.user.service;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
|
||||
public interface RoleWritePlatformService {
|
||||
|
||||
+1
-1
@@ -3,8 +3,8 @@ package org.mifosng.platform.user.service;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.api.commands.RoleCommand;
|
||||
import org.mifosng.platform.api.commands.RolePermissionCommand;
|
||||
import org.mifosng.platform.client.service.RollbackTransactionAsCommandIsNotApprovedByCheckerException;
|
||||
import org.mifosng.platform.exceptions.PermissionNotFoundException;
|
||||
import org.mifosng.platform.exceptions.RoleNotFoundException;
|
||||
|
||||
Reference in New Issue
Block a user