mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-12 21:55:37 +00:00
Merge branch 'permission-vertical' of ssh://trac@sapsailing.com/home/trac/git into permission-vertical
This commit is contained in:
commit
f4c99f35e0
1 file changed
+43
-17
+43
-17
@@ -95,6 +95,7 @@ import com.sap.sailing.domain.common.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl;
|
||||
@@ -133,7 +134,11 @@ import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sse.security.ActionWithResult;
|
||||
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
|
||||
import com.sap.sse.security.shared.OwnershipAnnotation;
|
||||
import com.sap.sse.security.shared.WithQualifiedObjectIdentifier;
|
||||
import com.sap.sse.security.shared.impl.UserGroup;
|
||||
import com.sap.sse.util.impl.UUIDHelper;
|
||||
|
||||
@Path("/v1/leaderboards")
|
||||
@@ -606,24 +611,45 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
throws NotDenotedForRaceLogTrackingException, Exception {
|
||||
SecurityUtils.getSubject().checkPermission(SecuredDomainType.LEADERBOARD.getStringPermissionForObjects(DefaultActions.UPDATE, leaderboardName));
|
||||
final LeaderboardAndRaceColumnAndFleetAndResponse leaderboardAndRaceColumnAndFleetAndResponse = getLeaderboardAndRaceColumnAndFleet(leaderboardName, raceColumnName, fleetName);
|
||||
final Response result;
|
||||
if (leaderboardAndRaceColumnAndFleetAndResponse.getFleet() != null) {
|
||||
JSONObject jsonResult = new JSONObject();
|
||||
final RaceLogTrackingAdapter adapter = getRaceLogTrackingAdapter();
|
||||
jsonResult.put("addeddenotation", adapter.denoteRaceForRaceLogTracking(getService(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getRaceColumn(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getFleet(), /* use default race name */ null));
|
||||
final RaceHandle raceHandle = adapter.startTracking(getService(), leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getRaceColumn(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getFleet(),
|
||||
trackWind == null ? true : trackWind,
|
||||
correctWindDirectionByMagneticDeclination == null ? true : correctWindDirectionByMagneticDeclination,
|
||||
new PermissionAwareRaceTrackingHandler(getSecurityService()));
|
||||
jsonResult.put("regatta", raceHandle.getRegatta().getName());
|
||||
result = Response.ok(jsonResult.toJSONString()).build();
|
||||
|
||||
final ActionWithResult<Response> innerAction = () -> {
|
||||
final Response result;
|
||||
if (leaderboardAndRaceColumnAndFleetAndResponse.getFleet() != null) {
|
||||
JSONObject jsonResult = new JSONObject();
|
||||
final RaceLogTrackingAdapter adapter = getRaceLogTrackingAdapter();
|
||||
jsonResult.put("addeddenotation", adapter.denoteRaceForRaceLogTracking(getService(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getRaceColumn(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getFleet(), /* use default race name */ null));
|
||||
final RaceHandle raceHandle = adapter.startTracking(getService(), leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getRaceColumn(),
|
||||
leaderboardAndRaceColumnAndFleetAndResponse.getFleet(),
|
||||
trackWind == null ? true : trackWind,
|
||||
correctWindDirectionByMagneticDeclination == null ? true : correctWindDirectionByMagneticDeclination,
|
||||
new PermissionAwareRaceTrackingHandler(getSecurityService()));
|
||||
jsonResult.put("regatta", raceHandle.getRegatta().getName());
|
||||
result = Response.ok(jsonResult.toJSONString()).build();
|
||||
} else {
|
||||
result = leaderboardAndRaceColumnAndFleetAndResponse.getResponse();
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
final Leaderboard leaderboard = leaderboardAndRaceColumnAndFleetAndResponse.getLeaderboard();
|
||||
final WithQualifiedObjectIdentifier leaderboardOrRegatta;
|
||||
if (leaderboard instanceof RegattaLeaderboard) {
|
||||
leaderboardOrRegatta = ((RegattaLeaderboard) leaderboard).getRegatta();
|
||||
} else {
|
||||
result = leaderboardAndRaceColumnAndFleetAndResponse.getResponse();
|
||||
leaderboardOrRegatta = leaderboard;
|
||||
}
|
||||
final OwnershipAnnotation ownership = getSecurityService().getOwnership(leaderboardOrRegatta.getIdentifier());
|
||||
final UserGroup groupOwner = ownership == null ? null : ownership.getAnnotation().getTenantOwner();
|
||||
|
||||
final Response result;
|
||||
if (groupOwner == null) {
|
||||
result = innerAction.run();
|
||||
} else {
|
||||
result = getSecurityService().doWithTemporaryDefaultTenant(groupOwner, innerAction);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user