example of roles api for john.

This commit is contained in:
Keith Woodlock
2012-11-21 17:07:50 +00:00
parent 4101cfbcf5
commit 447b180790
11 changed files with 338 additions and 268 deletions
@@ -0,0 +1,22 @@
package org.mifosng.platform.accounting.api.commands;
import java.util.Map;
public class RolePermissionCommand {
private final Long roleId;
private final Map<String, Boolean> permissions;
public RolePermissionCommand(final Long roleId, final Map<String, Boolean> permissionsMap) {
this.roleId = roleId;
this.permissions = permissionsMap;
}
public Map<String, Boolean> getPermissions() {
return this.permissions;
}
public Long getRoleId() {
return this.roleId;
}
}
@@ -15,12 +15,13 @@ 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.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.data.RolePermissionsData;
import org.mifosng.platform.api.infrastructure.PortfolioApiDataConversionService;
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
@@ -37,143 +38,144 @@ import org.springframework.stereotype.Component;
@Scope("singleton")
public class RolesApiResource {
@Autowired
private RoleReadPlatformService roleReadPlatformService;
@Autowired
private RoleReadPlatformService roleReadPlatformService;
@Autowired
private PermissionReadPlatformService permissionReadPlatformService;
@Autowired
private PermissionReadPlatformService permissionReadPlatformService;
@Autowired
private RoleWritePlatformService roleWritePlatformService;
@Autowired
private RoleWritePlatformService roleWritePlatformService;
@Autowired
private PortfolioApiDataConversionService apiDataConversionService;
@Autowired
private PortfolioApiJsonSerializerService apiJsonSerializerService;
@Autowired
private PortfolioApiDataConversionService apiDataConversionService;
private final String entityType = "ROLE";
@Autowired
private PortfolioApiJsonSerializerService apiJsonSerializerService;
private final String entityType = "ROLE";
@Autowired
private PlatformSecurityContext context;
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAllRoles(@Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(entityType);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final Collection<RoleData> roles = this.roleReadPlatformService.retrieveAllRoles();
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, roles);
}
@GET
@Path("template")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveNewRoleDetails(@Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(entityType);
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 })
public String createRole(final String jsonRequestBody) {
final RoleCommand command = this.apiDataConversionService.convertJsonToRoleCommand(null, jsonRequestBody);
final Long roleId = this.roleWritePlatformService.createRole(command);
return this.apiJsonSerializerService.serializeEntityIdentifier(new EntityIdentifier(roleId));
}
// TODO - General thing to fix about REST API is if use partial response
// approach of fields=id,name,selectedPermissions
// It will return just id,name parameters of RoleData and ignore
// description, however as PermissionData used in selectedPermissions
// collection
// also has a field called description it gets ignored also. This is because
// of the implementation of ParameterListExclusionStrategy which doesnt take
// into account the Object its looking at.
@GET
@Path("{roleId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveRole(@PathParam("roleId") final Long roleId, @Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(entityType);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final boolean template = ApiParameterHelper.template(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);
}
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
}
@PUT
@Path("{roleId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String updateRole(@PathParam("roleId") final Long roleId, final String jsonRequestBody) {
final RoleCommand command = this.apiDataConversionService.convertJsonToRoleCommand(roleId, jsonRequestBody);
this.roleWritePlatformService.updateRole(command);
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);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
Collection<PermissionUsageData> permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId);
RolePermissionsData permissionsData = new RolePermissionsData(role.getId(), role.getName(), role.getDescription(),
permissionUsageData);
return this.apiJsonSerializerService.serializeRolePermissionDataToJson(prettyPrint, responseParameters, permissionsData);
}
@GET
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String retrieveAllRoles(@Context final UriInfo uriInfo) {
@PUT
@Path("{roleId}/permissions")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String updateRolePermissions(@PathParam("roleId") final Long roleId, final String jsonRequestBody) {
context.authenticatedUser().validateHasReadPermission(entityType);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final RolePermissionCommand command = this.apiDataConversionService.convertJsonToRolePermissionCommand(roleId, jsonRequestBody);
final Collection<RoleData> roles = this.roleReadPlatformService.retrieveAllRoles();
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, roles);
}
this.roleWritePlatformService.updateRolePermissions(command);
@GET
@Path("template")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String retrieveNewRoleDetails(@Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(entityType);
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})
public String createRole(final String jsonRequestBody) {
final RoleCommand command = this.apiDataConversionService.convertJsonToRoleCommand(null, jsonRequestBody);
final Long roleId = this.roleWritePlatformService.createRole(command);
return this.apiJsonSerializerService.serializeEntityIdentifier(new EntityIdentifier(roleId));
}
// TODO - General thing to fix about REST API is if use partial response approach of fields=id,name,selectedPermissions
// It will return just id,name parameters of RoleData and ignore description, however as PermissionData used in selectedPermissions collection
// also has a field called description it gets ignored also. This is because of the implementation of ParameterListExclusionStrategy which doesnt take
// into account the Object its looking at.
@GET
@Path("{roleId}")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String retrieveRole(@PathParam("roleId") final Long roleId, @Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(entityType);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
final boolean template = ApiParameterHelper.template(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);
}
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
}
@PUT
@Path("{roleId}")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String updateRole(@PathParam("roleId") final Long roleId, final String jsonRequestBody) {
final RoleCommand command = this.apiDataConversionService.convertJsonToRoleCommand(roleId, jsonRequestBody);
this.roleWritePlatformService.updateRole(command);
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);
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
Collection<PermissionUsageData> permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId);
RolePermissionData rolePermissionData = new RolePermissionData(role.getId(), role.getName(), role.getDescription(), permissionUsageData);
return this.apiJsonSerializerService.serializeRolePermissionDataToJson(prettyPrint, responseParameters, rolePermissionData);
}
@PUT
@Path("{roleId}/permissions")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public String updateRolePermissions(@PathParam("roleId") final Long roleId, @Context final UriInfo uriInfo) {
return "{}";
/*
final Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
Collection<PermissionUsageData> permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId);
RolePermissionData rolePermissionData = new RolePermissionData(role.getId(), role.getName(), role.getDescription(), permissionUsageData);
return this.apiJsonSerializerService.serializeRolePermissionDataToJson(prettyPrint, responseParameters, rolePermissionData);*/
}
return this.apiJsonSerializerService.serializeEntityIdentifier(new EntityIdentifier(roleId));
}
}
@@ -2,40 +2,39 @@ package org.mifosng.platform.api.data;
public class PermissionUsageData {
private final String grouping;
private final String code;
private final String entityName;
private final String actionName;
private final Boolean selected;
private final String grouping;
private final String code;
private final String entityName;
private final String actionName;
private final Boolean selected;
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) {
this.grouping = grouping;
this.code = code;
this.entityName = entityName;
this.actionName = actionName;
this.selected = selected;
}
public String getGrouping() {
return grouping;
}
public String getGrouping() {
return grouping;
}
public String getCode() {
return code;
}
public String getCode() {
return code;
}
public String getEntityName() {
return entityName;
}
public String getEntityName() {
return entityName;
}
public String getActionName() {
return actionName;
}
public String getActionName() {
return actionName;
}
public Boolean getSelected() {
return selected;
}
public Boolean getSelected() {
return selected;
}
}
@@ -1,38 +0,0 @@
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;
}
}
@@ -0,0 +1,37 @@
package org.mifosng.platform.api.data;
import java.util.Collection;
public class RolePermissionsData {
private final Long id;
private final String name;
private final String description;
private final Collection<PermissionUsageData> permissionUsageData;
public RolePermissionsData(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;
}
}
@@ -38,7 +38,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.RolePermissionsData;
import org.mifosng.platform.api.data.SavingAccountData;
import org.mifosng.platform.api.data.SavingProductData;
import org.mifosng.platform.api.data.StaffData;
@@ -232,7 +232,7 @@ public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApi
@Override
public String serializeRolePermissionDataToJson(final boolean prettyPrint, final Set<String> responseParameters,
final RolePermissionData rolePermissionData) {
final RolePermissionsData rolePermissionData) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(ROLE_PERMISSION_DATA_PARAMETERS,
prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, rolePermissionData);
@@ -1,5 +1,6 @@
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;
@@ -40,6 +41,8 @@ public interface PortfolioApiDataConversionService {
OfficeCommand convertJsonToOfficeCommand(Long resourceIdentifier, String json);
RoleCommand convertJsonToRoleCommand(Long resourceIdentifier, String json);
RolePermissionCommand convertJsonToRolePermissionCommand(Long roleId, String jsonRequestBody);
UserCommand convertJsonToUserCommand(Long resourceIdentifier, String json);
@@ -17,6 +17,7 @@ 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;
@@ -263,6 +264,17 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
return new RoleCommand(modifiedParameters, resourceIdentifier, name, description, permissionIds);
}
@Override
public RolePermissionCommand convertJsonToRolePermissionCommand(final Long roleId, 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 RolePermissionCommand(roleId, permissionsMap);
}
@Override
public UserCommand convertJsonToUserCommand(final Long resourceIdentifier, final String json) {
@@ -36,7 +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.RolePermissionsData;
import org.mifosng.platform.api.data.SavingAccountData;
import org.mifosng.platform.api.data.SavingProductData;
import org.mifosng.platform.api.data.StaffData;
@@ -57,7 +57,7 @@ public interface PortfolioApiJsonSerializerService {
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, RoleData role);
String serializeRolePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, RolePermissionData rolePermissionData);
String serializeRolePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, RolePermissionsData rolePermissionData);
String serializeAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<AppUserData> users);
@@ -1,13 +1,17 @@
package org.mifosng.platform.user.service;
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
import org.mifosng.platform.api.commands.RoleCommand;
import org.springframework.security.access.prepost.PreAuthorize;
public interface RoleWritePlatformService {
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'USER_ADMINISTRATION_SUPER_USER', 'CREATE_ROLE')")
Long createRole(RoleCommand command);
Long createRole(RoleCommand command);
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'USER_ADMINISTRATION_SUPER_USER', 'UPDATE_ROLE')")
Long updateRole(RoleCommand command);
Long updateRole(RoleCommand command);
@PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'USER_ADMINISTRATION_SUPER_USER', 'PERMISSIONS_ROLE')")
Long updateRolePermissions(RolePermissionCommand command);
}
@@ -3,7 +3,9 @@ package org.mifosng.platform.user.service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
import org.mifosng.platform.api.commands.RoleCommand;
import org.mifosng.platform.exceptions.RoleNotFoundException;
import org.mifosng.platform.security.PlatformSecurityContext;
@@ -19,74 +21,101 @@ import org.springframework.util.ObjectUtils;
@Service
public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatformService {
private final PlatformSecurityContext context;
private final RoleRepository roleRepository;
private final PlatformSecurityContext context;
private final RoleRepository roleRepository;
private final PermissionRepository permissionRepository;
@Autowired
public RoleWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final RoleRepository roleRepository, final PermissionRepository permissionRepository) {
this.context = context;
this.roleRepository = roleRepository;
this.permissionRepository = permissionRepository;
}
@Transactional
@Override
public Long createRole(final RoleCommand command) {
context.authenticatedUser();
RoleCommandValidator validator = new RoleCommandValidator(command);
validator.validateForCreate();
private final PermissionRepository permissionRepository;
List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions());
@Autowired
public RoleWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final RoleRepository roleRepository,
final PermissionRepository permissionRepository) {
this.context = context;
this.roleRepository = roleRepository;
this.permissionRepository = permissionRepository;
}
Role entity = new Role(command.getName(), command.getDescription(), selectedPermissions);
this.roleRepository.save(entity);
@Transactional
@Override
public Long createRole(final RoleCommand command) {
return entity.getId();
}
context.authenticatedUser();
@Transactional
@Override
public Long updateRole(RoleCommand command) {
context.authenticatedUser();
RoleCommandValidator validator = new RoleCommandValidator(command);
validator.validateForUpdate();
RoleCommandValidator validator = new RoleCommandValidator(command);
validator.validateForCreate();
List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions());
Role role = this.roleRepository.findOne(command.getId());
if (role == null) {
throw new RoleNotFoundException(command.getId());
}
role.update(command, selectedPermissions);
this.roleRepository.save(role);
return role.getId();
}
private List<Permission> assembleListOfSelectedPermissions(final String[] selectedPermissionsArray) {
List<Long> selectedPermissionIds = new ArrayList<Long>();
List<Permission> selectedPermissions = new ArrayList<Permission>();
if (!ObjectUtils.isEmpty(selectedPermissionsArray)) {
for (String selectedId : selectedPermissionsArray) {
selectedPermissionIds.add(Long.valueOf(selectedId));
}
Collection<Permission> allPermissions = this.permissionRepository.findAll();
for (Permission permission : allPermissions) {
if (selectedPermissionIds.contains(permission.getId())) {
selectedPermissions.add(permission);
}
}
}
return selectedPermissions;
}
List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions());
Role entity = new Role(command.getName(), command.getDescription(), selectedPermissions);
this.roleRepository.save(entity);
return entity.getId();
}
@Transactional
@Override
public Long updateRole(RoleCommand command) {
context.authenticatedUser();
RoleCommandValidator validator = new RoleCommandValidator(command);
validator.validateForUpdate();
List<Permission> selectedPermissions = assembleListOfSelectedPermissions(command.getPermissions());
Role role = this.roleRepository.findOne(command.getId());
if (role == null) { throw new RoleNotFoundException(command.getId()); }
role.update(command, selectedPermissions);
this.roleRepository.save(role);
return role.getId();
}
@Transactional
@Override
public Long updateRolePermissions(final RolePermissionCommand command) {
context.authenticatedUser();
// RoleCommandValidator validator = new RoleCommandValidator(command);
// validator.validateForUpdate();
final Role role = this.roleRepository.findOne(command.getRoleId());
if (role == null) {
throw new RoleNotFoundException(command.getRoleId());
}
Map<String, Boolean> permissions = command.getPermissions();
for (String permissionCode : permissions.keySet()) {
Boolean selected = permissions.get(permissionCode);
if (selected.booleanValue()) {
// this.permissionRepository.findOne(id)
}
}
// role.update(command, selectedPermissions);
this.roleRepository.save(role);
return role.getId();
}
private List<Permission> assembleListOfSelectedPermissions(final String[] selectedPermissionsArray) {
List<Long> selectedPermissionIds = new ArrayList<Long>();
List<Permission> selectedPermissions = new ArrayList<Permission>();
if (!ObjectUtils.isEmpty(selectedPermissionsArray)) {
for (String selectedId : selectedPermissionsArray) {
selectedPermissionIds.add(Long.valueOf(selectedId));
}
Collection<Permission> allPermissions = this.permissionRepository.findAll();
for (Permission permission : allPermissions) {
if (selectedPermissionIds.contains(permission.getId())) {
selectedPermissions.add(permission);
}
}
}
return selectedPermissions;
}
}