mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-19 20:25:31 +00:00
bug 4813: make sure that typerelativeidentifer is running trough
corresponding convert method on object creation
This commit is contained in:
+21
@@ -28,6 +28,13 @@ public interface DomainIdentifierStrategy extends IdentifierStrategy {
|
||||
regattaAndRaceIdentifer.getRaceName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
assert object.length == 1;
|
||||
RegattaAndRaceIdentifier identifer = (RegattaAndRaceIdentifier) object[0];
|
||||
return WildcardPermissionEncoder.encode(identifer.getRegattaName(), identifer.getRaceName());
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -42,6 +49,13 @@ public interface DomainIdentifierStrategy extends IdentifierStrategy {
|
||||
return mediaTrack.dbId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
assert object.length == 1;
|
||||
String identifer = (String) object[0];
|
||||
return identifer;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -57,6 +71,13 @@ public interface DomainIdentifierStrategy extends IdentifierStrategy {
|
||||
return WildcardPermissionEncoder.encode(scoreCorrectionProvider.getName(), object[1].toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
assert object.length == 2;
|
||||
ScoreCorrectionProvider scoreCorrectionProvider = (ScoreCorrectionProvider) object[0];
|
||||
return WildcardPermissionEncoder.encode(scoreCorrectionProvider.getName(), object[1].toString());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
+9
@@ -36,6 +36,15 @@ public class IgtimiSecuredDomainType extends SecuredDomainType {
|
||||
return WildcardPermissionEncoder.encode(account.getUser().getEmail());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
// TODO: check again, what type can be used, for now assuming String for the
|
||||
// account.getUser().getEmail()
|
||||
assert object.length == 1;
|
||||
String identifier = (String) object[0];
|
||||
return WildcardPermissionEncoder.encode(identifier);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
+8
@@ -40,6 +40,14 @@ public class SwissTimingSecuredDomainTypes extends SecuredDomainType {
|
||||
return WildcardPermissionEncoder.encode(hasJsonUrl.getJsonURL());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
// TODO: check again, what type can be used, for now assuming String for the hasJsonUrl.getJsonURL()
|
||||
assert object.length == 1;
|
||||
String identifier = (String) object[0];
|
||||
return WildcardPermissionEncoder.encode(identifier);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+12
-2
@@ -19,8 +19,9 @@ public class TracTracSecuredDomainType extends SecuredDomainType {
|
||||
super(logicalTypeName, identiferStrategy);
|
||||
}
|
||||
|
||||
public static final HasPermissions TRACTRAC_ACCOUNT = new SecuredDomainType("TRACTRAC_ACCOUNT", TracTracIdentifierStrategy.TRACTRAC_ACCOUNT);
|
||||
|
||||
public static final HasPermissions TRACTRAC_ACCOUNT = new SecuredDomainType("TRACTRAC_ACCOUNT",
|
||||
TracTracIdentifierStrategy.TRACTRAC_ACCOUNT);
|
||||
|
||||
private interface TracTracIdentifierStrategy {
|
||||
static IdentifierStrategy TRACTRAC_ACCOUNT = new IdentifierStrategy() {
|
||||
|
||||
@@ -31,6 +32,15 @@ public class TracTracSecuredDomainType extends SecuredDomainType {
|
||||
return WildcardPermissionEncoder.encode(tracTracConfiguration.getJSONURL());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
// TODO: check again, what type can be used, for now assuming String for the
|
||||
// tracTracConfiguration.getJSONURL()
|
||||
assert object.length == 1;
|
||||
String identifier = (String) object[0];
|
||||
return WildcardPermissionEncoder.encode(identifier);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -37,6 +37,15 @@ public class ExpeditionSecuredDomainTypes extends SecuredDomainType {
|
||||
return WildcardPermissionEncoder.encode(ServerInfo.getName(), expeditionDeviceConfiguration.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
// TODO: check again, what type can be used, for now assuming String for the
|
||||
// expeditionDeviceConfiguration.getName()
|
||||
assert object.length == 1;
|
||||
String identifier = (String) object[0];
|
||||
return WildcardPermissionEncoder.encode(ServerInfo.getName(), identifier);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -86,7 +86,7 @@ public class RegattasResourceTest extends AbstractJaxRsApiTest {
|
||||
series.add(testSeries);
|
||||
final UUID closedRegattaUuid = UUID.randomUUID();
|
||||
getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(SecuredDomainType.REGATTA,
|
||||
closedRegattaUuid.toString(), closedRegattaName, new ActionWithResult<Regatta>() {
|
||||
closedRegattaName, closedRegattaName, new ActionWithResult<Regatta>() {
|
||||
@Override
|
||||
public Regatta run() throws Exception {
|
||||
return racingEventService.createRegatta(closedRegattaName, boatClassName,
|
||||
@@ -98,9 +98,8 @@ public class RegattasResourceTest extends AbstractJaxRsApiTest {
|
||||
/* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new);
|
||||
}
|
||||
});
|
||||
final UUID openRegattaUuid = UUID.randomUUID();
|
||||
getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(SecuredDomainType.REGATTA,
|
||||
openRegattaUuid.toString(), openRegattaName, new ActionWithResult<Regatta>() {
|
||||
openRegattaName, openRegattaName, new ActionWithResult<Regatta>() {
|
||||
@Override
|
||||
public Regatta run() throws Exception {
|
||||
return racingEventService.createRegatta(openRegattaName, boatClassName,
|
||||
|
||||
+2
-2
@@ -418,7 +418,7 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
Iterable<ImageDescriptor> images = Collections.<ImageDescriptor> emptyList();
|
||||
Iterable<VideoDescriptor> videos = Collections.<VideoDescriptor> emptyList();
|
||||
Event event = getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.EVENT, eventId.toString(),
|
||||
SecuredDomainType.EVENT, eventId,
|
||||
eventName, new ActionWithResult<Event>() {
|
||||
|
||||
@Override
|
||||
@@ -476,7 +476,7 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
UUID leaderboardGroupId = UUID.randomUUID();
|
||||
LeaderboardGroup leaderboardGroup = getSecurityService()
|
||||
.setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.LEADERBOARD_GROUP, leaderboardGroupName,
|
||||
SecuredDomainType.LEADERBOARD_GROUP, leaderboardGroupId,
|
||||
leaderboardGroupName, new ActionWithResult<LeaderboardGroup>() {
|
||||
|
||||
@Override
|
||||
|
||||
+2
-2
@@ -487,7 +487,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
final CompetitorWithBoat competitor;
|
||||
if (subject.isAuthenticated()) {
|
||||
competitor = getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.COMPETITOR, competitorUuid.toString(), name,
|
||||
SecuredDomainType.COMPETITOR, competitorUuid, name,
|
||||
new ActionWithResult<CompetitorWithBoat>() {
|
||||
@Override
|
||||
public CompetitorWithBoat run() throws Exception {
|
||||
@@ -564,7 +564,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
final DynamicBoat boat;
|
||||
if (SecurityUtils.getSubject().isAuthenticated()) {
|
||||
boat = getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.BOAT, boatUUID.toString(), name, new ActionWithResult<DynamicBoat>() {
|
||||
SecuredDomainType.BOAT, boatUUID, name, new ActionWithResult<DynamicBoat>() {
|
||||
|
||||
@Override
|
||||
public DynamicBoat run() throws Exception {
|
||||
|
||||
+1
-1
@@ -227,7 +227,7 @@ public class SailingHierarchyOwnershipUpdater {
|
||||
// and is possible out of date.
|
||||
final UUID newGroupId = UUID.randomUUID();
|
||||
return securitySerice.setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredSecurityTypes.USER_GROUP, newGroupId.toString(), name, () -> {
|
||||
SecuredSecurityTypes.USER_GROUP, newGroupId, name, () -> {
|
||||
final UserGroup createdUserGroup = securitySerice.createUserGroup(newGroupId, name);
|
||||
securitySerice.copyUsersAndRoleAssociations(userGroupToCopy, createdUserGroup);
|
||||
return createdUserGroup;
|
||||
|
||||
+2
-5
@@ -26,7 +26,6 @@ import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
|
||||
import com.sap.sse.security.shared.impl.Ownership;
|
||||
import com.sap.sse.util.ThreadLocalTransporter;
|
||||
|
||||
@@ -59,9 +58,8 @@ public class PermissionAwareRaceTrackingHandler extends DefaultRaceTrackingHandl
|
||||
try {
|
||||
RegattaNameAndRaceName regattaAndRaceIdentifier = new RegattaNameAndRaceName(
|
||||
trackedRegatta.getRegatta().getName(), raceDefinition.getName());
|
||||
QualifiedObjectIdentifier qualifiedObjectIdentifier = TrackedRace.getIdentifier(regattaAndRaceIdentifier);
|
||||
return securityService.setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.TRACKED_RACE, qualifiedObjectIdentifier.getTypeRelativeObjectIdentifier(),
|
||||
SecuredDomainType.TRACKED_RACE, regattaAndRaceIdentifier,
|
||||
regattaAndRaceIdentifier.toString(), () -> {
|
||||
return super.createTrackedRace(trackedRegatta, raceDefinition, sidelines, windStore,
|
||||
delayToLiveInMillis, millisecondsOverWhichToAverageWind,
|
||||
@@ -80,9 +78,8 @@ public class PermissionAwareRaceTrackingHandler extends DefaultRaceTrackingHandl
|
||||
subjectThreadState.bind();
|
||||
try {
|
||||
RegattaNameAndRaceName regattaAndRaceIdentifier = new RegattaNameAndRaceName(regatta.getName(), name);
|
||||
QualifiedObjectIdentifier qualifiedObjectIdentifier = TrackedRace.getIdentifier(regattaAndRaceIdentifier);
|
||||
return securityService.setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.TRACKED_RACE, qualifiedObjectIdentifier.getTypeRelativeObjectIdentifier(),
|
||||
SecuredDomainType.TRACKED_RACE, regattaAndRaceIdentifier,
|
||||
regattaAndRaceIdentifier.toString(), () -> {
|
||||
return super.createRaceDefinition(regatta, name, course, boatClass, competitorsAndTheirBoats,
|
||||
id);
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ public interface HasPermissions {
|
||||
* "LEADERBOARD/abc". This assumes that the {@link #name()} method returns only values that do not contain a "/".
|
||||
*/
|
||||
QualifiedObjectIdentifier getQualifiedObjectIdentifierByString(String typeRelativeObjectIdentifier);
|
||||
|
||||
|
||||
/**
|
||||
* Qualifies the {@code objectIdentifier} which only has to be unique within the scope of the type identified by
|
||||
* this permission with this permission's type name. For example, if this permission is for the "LEADERBOARD" type,
|
||||
|
||||
+28
-8
@@ -1,5 +1,7 @@
|
||||
package com.sap.sse.security.shared;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sse.common.Named;
|
||||
import com.sap.sse.common.WithID;
|
||||
import com.sap.sse.security.shared.impl.WildcardPermissionEncoder;
|
||||
@@ -7,6 +9,7 @@ import com.sap.sse.security.shared.impl.WildcardPermissionEncoder;
|
||||
public interface IdentifierStrategy {
|
||||
|
||||
String getIdentifierAsString(Object... object);
|
||||
String convertNewIdentifer(Object... object);
|
||||
|
||||
/**
|
||||
* Identifier strategy that is used for object types that implement the
|
||||
@@ -21,14 +24,12 @@ public interface IdentifierStrategy {
|
||||
return WildcardPermissionEncoder.encode(namedObject.getName());
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public <T> String buildNewIdentifier(T... params) {
|
||||
// if (params.length != 1) {
|
||||
// throw new IllegalArgumentException("IdentifierStrategy NAMED can only have one parameter for the name.");
|
||||
// } else {
|
||||
// return WildcardPermissionEncoder.encode((String) params[0]);
|
||||
// }
|
||||
// }
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
assert object.length == 1;
|
||||
String identifer = (String) object[0];
|
||||
return WildcardPermissionEncoder.encode(identifer);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -45,6 +46,13 @@ public interface IdentifierStrategy {
|
||||
return objectWithId.getId().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
assert object.length == 1;
|
||||
Serializable identifier = (Serializable) object[0];
|
||||
return identifier.toString();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -59,6 +67,13 @@ public interface IdentifierStrategy {
|
||||
return WildcardPermissionEncoder.encode((String) object[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
assert object.length == 1;
|
||||
String identifier = (String) object[0];
|
||||
return WildcardPermissionEncoder.encode(identifier);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -80,6 +95,11 @@ public interface IdentifierStrategy {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertNewIdentifer(Object... object) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -334,11 +334,11 @@ public interface SecurityService extends ReplicableWithObjectInputStream<Replica
|
||||
UserGroup getDefaultTenant();
|
||||
|
||||
<T> T setOwnershipCheckPermissionForObjectCreationAndRevertOnError(HasPermissions type,
|
||||
String typeRelativeObjectIdentifier,
|
||||
Object typeRelativeObjectIdentifier,
|
||||
String securityDisplayName, ActionWithResult<T> createActionReturningCreatedObject);
|
||||
|
||||
void setOwnershipCheckPermissionForObjectCreationAndRevertOnError(HasPermissions type,
|
||||
String typeRelativeObjectIdentifier, String securityDisplayName, Action actionToCreateObject);
|
||||
Object typeRelativeObjectIdentifier, String securityDisplayName, Action actionToCreateObject);
|
||||
|
||||
User getAllUser();
|
||||
|
||||
|
||||
@@ -1500,7 +1500,7 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
|
||||
|
||||
@Override
|
||||
public <T> T setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
HasPermissions type, String typeIdentifier, String securityDisplayName,
|
||||
HasPermissions type, Object typeIdentifier, String securityDisplayName,
|
||||
ActionWithResult<T> actionWithResult) {
|
||||
return setOwnershipCheckPermissionForObjectCreationAndRevertOnError(getDefaultTenantForCurrentUser(), type,
|
||||
typeIdentifier, securityDisplayName, actionWithResult, false);
|
||||
@@ -1508,7 +1508,7 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
|
||||
|
||||
@Override
|
||||
public void setOwnershipCheckPermissionForObjectCreationAndRevertOnError(HasPermissions type,
|
||||
String typeRelativeObjectIdentifier, String securityDisplayName,
|
||||
Object typeRelativeObjectIdentifier, String securityDisplayName,
|
||||
Action actionToCreateObject) {
|
||||
setOwnershipCheckPermissionForObjectCreationAndRevertOnError(type, typeRelativeObjectIdentifier,
|
||||
securityDisplayName, () -> {
|
||||
@@ -1549,9 +1549,9 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
|
||||
}
|
||||
|
||||
private <T> T setOwnershipCheckPermissionForObjectCreationAndRevertOnError(UserGroup tenantOwner,
|
||||
HasPermissions type, String typeRelativeObjectIdentifier, String securityDisplayName,
|
||||
HasPermissions type, Object typeRelativeObjectIdentifier, String securityDisplayName,
|
||||
ActionWithResult<T> createActionReturningCreatedObject, boolean checkCreateObjectOnServer) {
|
||||
QualifiedObjectIdentifier identifier = type.getQualifiedObjectIdentifierByString(typeRelativeObjectIdentifier);
|
||||
QualifiedObjectIdentifier identifier = type.getQualifiedObjectIdentifierByString(type.identifierStrategy().convertNewIdentifer(typeRelativeObjectIdentifier));
|
||||
T result = null;
|
||||
boolean didSetOwnerShip = false;
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user