Skip to content

Commit f2bb780

Browse files
committed
♻️ Refactor service ownership and rights evaluation to include product name parameter
1 parent f94e01f commit f2bb780

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

services/catalog/src/simcore_service_catalog/core/background_tasks.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ def _by_version(t: tuple[ServiceKey, ServiceVersion]) -> Version:
7777
owner_gid,
7878
service_access_rights,
7979
) = await access_rights.evaluate_service_ownership_and_rights(
80-
app, service_metadata
80+
app,
81+
service=service_metadata,
82+
product_name=app.state.default_product_name,
8183
)
8284

8385
# AUTO-UPGRADE PATCH policy

services/catalog/src/simcore_service_catalog/service/access_rights.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import arrow
1010
from fastapi import FastAPI
1111
from models_library.groups import GroupID
12+
from models_library.products import ProductName
1213
from models_library.services import ServiceMetaDataPublished
1314
from models_library.services_types import ServiceKey, ServiceVersion
1415
from packaging.version import Version
@@ -48,7 +49,7 @@ async def _is_old_service(app: FastAPI, service: ServiceMetaDataPublished) -> bo
4849

4950

5051
async def evaluate_service_ownership_and_rights(
51-
app: FastAPI, service: ServiceMetaDataPublished
52+
app: FastAPI, *, service: ServiceMetaDataPublished, product_name: ProductName
5253
) -> tuple[GroupID | None, list[ServiceAccessRightsDB]]:
5354
"""Evaluates the owner (group_id) and the access rights for a service
5455
@@ -114,7 +115,7 @@ async def evaluate_service_ownership_and_rights(
114115
write_access=(
115116
gid == owner_gid
116117
), # we add the owner with full rights, unless it's everyone
117-
product_name=app.state.default_product_name,
118+
product_name=product_name,
118119
)
119120
for gid in set(group_ids)
120121
]
@@ -191,7 +192,7 @@ async def inherit_from_previous_release(
191192
return inherited_data
192193

193194
# 1. ACCESS-RIGHTS:
194-
# Inherit access rights
195+
# Inherit access rights (from all products) from the previous release
195196
previous_access_rights = await services_repo.get_service_access_rights(
196197
previous_release.key, previous_release.version
197198
)

services/catalog/tests/unit/with_dbs/test_service_access_rights.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ async def test_auto_upgrade_policy(
123123
new_service_metadata.version = TypeAdapter(ServiceVersion).validate_python("1.0.11")
124124
new_service_metadata.icon = None # Remove icon to test inheritance
125125

126+
# latest-release
126127
latest_release_service, *latest_release_service_access_rights = (
127128
create_fake_service_data(
128129
new_service_metadata.key,
@@ -133,6 +134,23 @@ async def test_auto_upgrade_policy(
133134
)
134135
)
135136
latest_release_service["icon"] = "https://foo/previous_icon.svg"
137+
latest_release = (latest_release_service, *latest_release_service_access_rights)
138+
139+
# latest-release in other product
140+
_, *latest_release_service_access_rights_in_other_product = (
141+
create_fake_service_data(
142+
new_service_metadata.key,
143+
latest_release_service["version"],
144+
team_access="x",
145+
everyone_access=None,
146+
product=other_product, # <-- different product
147+
),
148+
)
149+
150+
latest_release_in_other_product = (
151+
latest_release_service,
152+
*latest_release_service_access_rights_in_other_product, # <-- different product
153+
)
136154

137155
# we have three versions of the service in the database for which the sorting matters: (1.0.11 should inherit from 1.0.10 not 1.0.9)
138156
await services_db_tables_injector(
@@ -153,7 +171,8 @@ async def test_auto_upgrade_policy(
153171
),
154172
# new release is a patch on released 1.0.X
155173
# which were released in two different product
156-
(latest_release_service, *latest_release_service_access_rights),
174+
latest_release,
175+
latest_release_in_other_product,
157176
]
158177
)
159178

@@ -168,7 +187,7 @@ async def test_auto_upgrade_policy(
168187

169188
# DEFAULT policies
170189
owner_gid, service_access_rights = await evaluate_service_ownership_and_rights(
171-
app, new_service_metadata
190+
app, service=new_service_metadata, product_name=target_product
172191
)
173192
assert owner_gid == user_gid
174193
assert len(service_access_rights) == 1

0 commit comments

Comments
 (0)