Bug 5047: Simplified the various map and filter methods in

SecurityService by removing the redundant HasPermissions parameter. This
can now be obtained from the given WithQualifiedObjectIdentifier values.
This commit is contained in:
Steffen Schaefer committed 2019-05-29 10:00:53 +02:00
1 parent 2c9cb5cbaa
commit b330981b40
4 files changed
+30 -32

No files matched your search

@@ -1024,13 +1024,13 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<RegattaDTO> getRegattas() {
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.REGATTA,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
getService().getAllRegattas(), this::convertToRegattaDTO);
}
@Override
public List<RegattaDTO> getRegattasWithUpdatePermission() {
return getSecurityService().mapAndFilterByExplicitPermissionForCurrentUser(SecuredDomainType.REGATTA,
return getSecurityService().mapAndFilterByExplicitPermissionForCurrentUser(
new HasPermissions.Action[] { DefaultActions.READ, DefaultActions.UPDATE },
getService().getAllRegattas(), this::convertToRegattaDTO);
}
@@ -1413,7 +1413,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<TracTracConfigurationWithSecurityDTO> getPreviousTracTracConfigurations() throws Exception {
final Iterable<TracTracConfiguration> configs = tractracDomainObjectFactory.getTracTracConfigurations();
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.TRACTRAC_ACCOUNT,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
configs,
ttConfig -> {
TracTracConfigurationWithSecurityDTO config = new TracTracConfigurationWithSecurityDTO(
@@ -2712,7 +2712,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
private ArrayList<String> getLeaderboardNamesFilteredForCurrentUser() {
final ArrayList<String> result = new ArrayList<>();
getSecurityService().filterObjectsWithPermissionForCurrentUser(SecuredDomainType.LEADERBOARD,
getSecurityService().filterObjectsWithPermissionForCurrentUser(
DefaultActions.READ, getService().getLeaderboards().values(), l -> result.add(l.getName()));
return result;
}
@@ -2782,7 +2782,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<StrippedLeaderboardDTOWithSecurity> getLeaderboardsWithSecurity() {
final Map<String, Leaderboard> leaderboards = getService().getLeaderboards();
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.LEADERBOARD,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
leaderboards.values(),
leaderboard -> createStrippedLeaderboardDTOWithSecurity(leaderboard, false, false));
}
@@ -3241,7 +3241,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<SwissTimingConfigurationWithSecurityDTO> getPreviousSwissTimingConfigurations() {
Iterable<SwissTimingConfiguration> configs = swissTimingAdapterPersistence.getSwissTimingConfigurations();
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.SWISS_TIMING_ACCOUNT, configs,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(configs,
stConfig -> {
final SwissTimingConfigurationWithSecurityDTO config = new SwissTimingConfigurationWithSecurityDTO(
stConfig.getName(), stConfig.getJsonURL(),
@@ -4179,7 +4179,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<LeaderboardGroupDTO> getLeaderboardGroups(boolean withGeoLocationData) {
final Map<String, LeaderboardGroup> leaderboardGroups = getService().getLeaderboardGroups();
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.LEADERBOARD_GROUP,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
leaderboardGroups.values(),
leaderboardGroup -> convertToLeaderboardGroupDTO(leaderboardGroup, withGeoLocationData, false));
}
@@ -4349,7 +4349,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<EventDTO> getEvents() throws MalformedURLException {
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.EVENT,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
getService().getAllEvents(), event -> {
EventDTO eventDTO = convertToEventDTO(event, false);
try {
@@ -5285,8 +5285,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
public List<SwissTimingArchiveConfigurationWithSecurityDTO> getPreviousSwissTimingArchiveConfigurations() {
Iterable<SwissTimingArchiveConfiguration> configs = swissTimingAdapterPersistence
.getSwissTimingArchiveConfigurations();
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
SecuredDomainType.SWISS_TIMING_ARCHIVE_ACCOUNT, configs,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(configs,
stArchiveConfig -> {
SwissTimingArchiveConfigurationWithSecurityDTO config = new SwissTimingArchiveConfigurationWithSecurityDTO(
stArchiveConfig.getJsonURL(), stArchiveConfig.getCreatorName());
@@ -6059,7 +6058,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public Iterable<BoatDTO> getStandaloneBoats() {
List<BoatDTO> result = new ArrayList<>();
getSecurityService().filterObjectsWithAnyPermissionForCurrentUser(SecuredDomainType.BOAT,
getSecurityService().filterObjectsWithAnyPermissionForCurrentUser(
SecuredSecurityTypes.PublicReadableActions.READ_AND_READ_PUBLIC_ACTIONS,
getService().getBaseDomainFactory().getCompetitorAndBoatStore().getStandaloneBoats(),
filteredObject -> result.add(convertToBoatDTO(filteredObject)));
@@ -6481,13 +6480,13 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public Iterable<String> getAllIgtimiAccountEmailAddresses() {
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.IGTIMI_ACCOUNT,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
getIgtimiConnectionFactory().getAllAccounts(), acc -> acc.getUser().getEmail());
}
@Override
public Iterable<AccountWithSecurityDTO> getAllIgtimiAccountsWithSecurity() {
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.IGTIMI_ACCOUNT,
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
getIgtimiConnectionFactory().getAllAccounts(), this::toSecuredIgtimiAccountDTO);
}
@@ -284,8 +284,7 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U
public Collection<UserGroupDTO> getUserGroups() {
Map<User, StrippedUserDTO> fromOriginalToStrippedDownUser = new HashMap<>();
Map<UserGroup, StrippedUserGroupDTO> fromOriginalToStrippedDownUserGroup = new HashMap<>();
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredSecurityTypes.USER_GROUP,
getSecurityService().getUserGroupList(),
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(getSecurityService().getUserGroupList(),
ug -> securityDTOFactory.createUserGroupDTOFromUserGroup(ug, fromOriginalToStrippedDownUser,
fromOriginalToStrippedDownUserGroup, getSecurityService()));
}
@@ -391,11 +391,11 @@ public interface SecurityService extends ReplicableWithObjectInputStream<Replica
void deleteAllDataForRemovedObject(QualifiedObjectIdentifier identifier);
<T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(HasPermissions permittedObject,
<T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(
com.sap.sse.security.shared.HasPermissions.Action action, Iterable<T> objectsToFilter,
Consumer<T> filteredObjectsConsumer);
<T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(HasPermissions permittedObject,
<T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(
com.sap.sse.security.shared.HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
Consumer<T> filteredObjectsConsumer);
@@ -403,13 +403,13 @@ public interface SecurityService extends ReplicableWithObjectInputStream<Replica
* Filters objects with any of the given permissions for the current user.
*/
<T extends WithQualifiedObjectIdentifier> void filterObjectsWithAnyPermissionForCurrentUser(
HasPermissions permittedObject, com.sap.sse.security.shared.HasPermissions.Action[] actions,
com.sap.sse.security.shared.HasPermissions.Action[] actions,
Iterable<T> objectsToFilter, Consumer<T> filteredObjectsConsumer);
<T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByReadPermissionForCurrentUser(HasPermissions permittedObject,
<T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByReadPermissionForCurrentUser(
Iterable<T> objectsToFilter, Function<T, R> filteredObjectsMapper);
<T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByExplicitPermissionForCurrentUser(HasPermissions permittedObject,
<T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByExplicitPermissionForCurrentUser(
HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
Function<T, R> filteredObjectsMapper);
@@ -1082,7 +1082,7 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
@Override
public Iterable<RoleDefinition> getRoleDefinitions() {
Collection<RoleDefinition> result = new ArrayList<>();
filterObjectsWithPermissionForCurrentUser(SecuredSecurityTypes.ROLE_DEFINITION, DefaultActions.READ,
filterObjectsWithPermissionForCurrentUser(DefaultActions.READ,
store.getRoleDefinitions(), t -> result.add(t));
return result;
}
@@ -1822,26 +1822,26 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
}
@Override
public <T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(HasPermissions permittedObject,
public <T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(
HasPermissions.Action action, Iterable<T> objectsToFilter,
Consumer<T> filteredObjectsConsumer) {
objectsToFilter.forEach(objectToCheck -> {
if (SecurityUtils.getSubject().isPermitted(
permittedObject.getStringPermissionForObject(action, objectToCheck))) {
objectToCheck.getIdentifier().getStringPermission(action))) {
filteredObjectsConsumer.accept(objectToCheck);
}
});
}
@Override
public <T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(HasPermissions permittedObject,
public <T extends WithQualifiedObjectIdentifier> void filterObjectsWithPermissionForCurrentUser(
HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
Consumer<T> filteredObjectsConsumer) {
objectsToFilter.forEach(objectToCheck -> {
boolean isPermitted = actions.length > 0;
for (int i = 0; i < actions.length; i++) {
isPermitted &= SecurityUtils.getSubject().isPermitted(
permittedObject.getStringPermissionForObject(actions[i], objectToCheck));
objectToCheck.getIdentifier().getStringPermission(actions[i]));
}
if (isPermitted) {
filteredObjectsConsumer.accept(objectToCheck);
@@ -1852,13 +1852,13 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
/** Filters the objects with any of the given permissions for the current user */
@Override
public <T extends WithQualifiedObjectIdentifier> void filterObjectsWithAnyPermissionForCurrentUser(
HasPermissions permittedObject, HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
Consumer<T> filteredObjectsConsumer) {
objectsToFilter.forEach(objectToCheck -> {
boolean isPermitted = false;
for (int i = 0; i < actions.length; i++) {
if (SecurityUtils.getSubject()
.isPermitted(permittedObject.getStringPermissionForObject(actions[i], objectToCheck))) {
.isPermitted(objectToCheck.getIdentifier().getStringPermission(actions[i]))) {
isPermitted = true;
break;
}
@@ -1870,20 +1870,20 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
}
@Override
public <T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByReadPermissionForCurrentUser(HasPermissions permittedObject,
public <T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByReadPermissionForCurrentUser(
Iterable<T> objectsToFilter, Function<T, R> filteredObjectsMapper) {
final List<R> result = new ArrayList<>();
filterObjectsWithPermissionForCurrentUser(permittedObject, DefaultActions.READ, objectsToFilter,
filterObjectsWithPermissionForCurrentUser(DefaultActions.READ, objectsToFilter,
filteredObject -> result.add(filteredObjectsMapper.apply(filteredObject)));
return result;
}
@Override
public <T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByExplicitPermissionForCurrentUser(HasPermissions permittedObject,
public <T extends WithQualifiedObjectIdentifier, R> List<R> mapAndFilterByExplicitPermissionForCurrentUser(
HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
Function<T, R> filteredObjectsMapper) {
final List<R> result = new ArrayList<>();
filterObjectsWithPermissionForCurrentUser(permittedObject, actions, objectsToFilter,
filterObjectsWithPermissionForCurrentUser(actions, objectsToFilter,
filteredObject -> result.add(filteredObjectsMapper.apply(filteredObject)));
return result;
}
@@ -1893,7 +1893,7 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
HasPermissions permittedObject, HasPermissions.Action[] actions, Iterable<T> objectsToFilter,
Function<T, R> filteredObjectsMapper) {
final List<R> result = new ArrayList<>();
filterObjectsWithAnyPermissionForCurrentUser(permittedObject, actions, objectsToFilter,
filterObjectsWithAnyPermissionForCurrentUser(actions, objectsToFilter,
filteredObject -> result.add(filteredObjectsMapper.apply(filteredObject)));
return result;
}