From 99e62f9846d3251c85755a43f889f2fbefeec130 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Tue, 29 Sep 2026 16:58:43 -0500 Subject: [PATCH] allow users to queue mosaics on their loaded maps --- ohmg/conf/http.py | 1 + ohmg/core/views.py | 28 +++++++++---------- .../components/map/MosaicDerivatives.svelte | 9 ++++-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/ohmg/conf/http.py b/ohmg/conf/http.py index 99db8a2b..d864271c 100644 --- a/ohmg/conf/http.py +++ b/ohmg/conf/http.py @@ -39,6 +39,7 @@ def user_info_from_request(request): user_info["is_authenticated"] = True user_info["is_staff"] = user.is_staff user_info["perms"] = sorted(list(user.get_all_permissions())) + user_info["loaded_maps"] = list(user.maps.values_list("pk", flat=True)) else: user_info = { "is_authenticated": False, diff --git a/ohmg/core/views.py b/ohmg/core/views.py index fe6fee49..448e3139 100644 --- a/ohmg/core/views.py +++ b/ohmg/core/views.py @@ -492,22 +492,22 @@ def post(self, request): return JsonResponseSuccess() if operation == "queue-cog-creation": - if not request.user.has_perm("core.queue_mosaic_cog"): - return JsonResponseUnauthorized() - layerset = LayerSet.objects.get( - map_id=payload["map-id"], category__slug=payload["category"] - ) - job_id = layerset.queue_mosaic_cog() - return JsonResponseSuccess(payload={"job": job_id}) + map = Map.objects.get(pk=payload["map-id"]) + if request.user.has_perm("core.queue_mosaic_cog") or request.user == map.loaded_by: + layerset = LayerSet.objects.get( + map_id=payload["map-id"], category__slug=payload["category"] + ) + job_id = layerset.queue_mosaic_cog() + return JsonResponseSuccess(payload={"job": job_id}) + return JsonResponseUnauthorized() if operation == "queue-tileset-creation": - if not request.user.has_perm("core.queue_mosaic_xyz"): - return JsonResponseUnauthorized() - layerset = LayerSet.objects.get( - map_id=payload["map-id"], category__slug=payload["category"] - ) - job_id = layerset.queue_mosaic_tileset() - return JsonResponseSuccess(payload={"job": job_id}) + map = Map.objects.get(pk=payload["map-id"]) + if request.user.has_perm("core.queue_mosaic_xyz") or request.user == map.loaded_by: + layerset = LayerSet.objects.get(map=map, category__slug=payload["category"]) + job_id = layerset.queue_mosaic_tileset() + return JsonResponseSuccess(payload={"job": job_id}) + return JsonResponseUnauthorized() class LayersetDerivativeView(View): diff --git a/ohmg/frontend/svelte_components/src/components/map/MosaicDerivatives.svelte b/ohmg/frontend/svelte_components/src/components/map/MosaicDerivatives.svelte index 866006fa..14118df3 100644 --- a/ohmg/frontend/svelte_components/src/components/map/MosaicDerivatives.svelte +++ b/ohmg/frontend/svelte_components/src/components/map/MosaicDerivatives.svelte @@ -17,6 +17,9 @@ let layersets = [] let loading = false; + const userCanCog = CONTEXT.user.perms.includes("core.queue_mosaic_cog") || CONTEXT.user.loaded_maps.includes(mapId) + const userCanXyz = CONTEXT.user.perms.includes("core.queue_mosaic_xyz") || CONTEXT.user.loaded_maps.includes(mapId) + const orderedCategories = [ "main-content", "key-map", @@ -52,8 +55,8 @@ i.xyzStaticArchiveURL = i.xyz_tiles_url ? `${i.xyz_tiles_url}/archive.tar.gz` : null; i.xyzStaticTilesURL = i.xyz_tiles_url ? `${i.xyz_tiles_url}/{z}/{x}/{y}.png` : null; - i.enableCogQueueBtn = CONTEXT.user.perms.includes("core.queue_mosaic_cog") - i.cogQueueBtnTitle = CONTEXT.user.perms.includes("core.queue_mosaic_cog") ? + i.enableCogQueueBtn = userCanCog; + i.cogQueueBtnTitle = userCanCog ? "Click to queue COG build" : "You do not have permission for this action" i.cogStale = false; @@ -68,7 +71,7 @@ i.enableXyzQueue = false; i.xyzQueueBtnTitle = "COG must be up-to-date before tileset can be built"; } - if (!CONTEXT.user.perms.includes("core.queue_mosaic_xyz")) { + if (!userCanXyz) { i.enableXyzQueue = false; i.xyzQueueBtnTitle = "You do not have permission for this action"; }