Skip to content

Commit 9725b72

Browse files
committed
fix
1 parent 7ac768d commit 9725b72

File tree

2 files changed

+3
-123
lines changed

2 files changed

+3
-123
lines changed

packages/models-library/src/models_library/services_access.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ServiceGroupAccessRightsV2(BaseModel):
3232

3333
class ServiceAccessRights(BaseModel):
3434
access_rights: Annotated[
35-
dict[GroupID, ServiceGroupAccessRightsV2] | None,
35+
dict[GroupID, ServiceGroupAccessRights] | None,
3636
Field(
3737
alias="accessRights",
3838
description="service access rights per group id",

services/catalog/src/simcore_service_catalog/api/rest/_services.py

Lines changed: 2 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
import asyncio
44
import logging
5-
import urllib.parse
65
from typing import Annotated, Any, TypeAlias, cast
76

87
from aiocache import cached # type: ignore[import-untyped]
98
from fastapi import APIRouter, Depends, Header, HTTPException, status
10-
from models_library.api_schemas_catalog.services import ServiceGet, ServiceUpdate
11-
from models_library.services import ServiceKey, ServiceType, ServiceVersion
9+
from models_library.api_schemas_catalog.services import ServiceGet
10+
from models_library.services import ServiceType
1211
from models_library.services_authoring import Author
1312
from models_library.services_metadata_published import ServiceMetaDataPublished
1413
from pydantic import ValidationError
@@ -25,7 +24,6 @@
2524
from ...db.repositories.services import ServicesRepository
2625
from ...models.services_db import ServiceAccessRightsAtDB, ServiceMetaDataAtDB
2726
from ...services.director import DirectorApi
28-
from ...services.function_services import is_function_service
2927
from ..dependencies.database import get_repository
3028
from ..dependencies.director import get_director_api
3129
from ..dependencies.services import get_service_from_manifest
@@ -266,121 +264,3 @@ async def get_service(
266264
| service_in_db.model_dump(exclude_unset=True, exclude={"owner"})
267265
)
268266
return service_data
269-
270-
271-
# @router.patch(
272-
# "/{service_key:path}/{service_version}",
273-
# response_model=ServiceGet,
274-
# **RESPONSE_MODEL_POLICY,
275-
# )
276-
async def update_service(
277-
# pylint: disable=too-many-arguments
278-
user_id: int,
279-
service_key: ServiceKey,
280-
service_version: ServiceVersion,
281-
updated_service: ServiceUpdate,
282-
director_client: Annotated[DirectorApi, Depends(get_director_api)],
283-
groups_repository: Annotated[
284-
GroupsRepository, Depends(get_repository(GroupsRepository))
285-
],
286-
services_repo: Annotated[
287-
ServicesRepository, Depends(get_repository(ServicesRepository))
288-
],
289-
x_simcore_products_name: Annotated[str | None, Header()] = None,
290-
):
291-
if is_function_service(service_key):
292-
# NOTE: this is a temporary decision after discussing with OM
293-
raise HTTPException(
294-
status_code=status.HTTP_403_FORBIDDEN,
295-
detail="Cannot update front-end services",
296-
)
297-
298-
# check the service exists
299-
await director_client.get(
300-
f"/services/{urllib.parse.quote_plus(service_key)}/{service_version}"
301-
)
302-
# the director client already raises an exception if not found
303-
304-
# get the user groups
305-
user_groups = await groups_repository.list_user_groups(user_id)
306-
if not user_groups:
307-
# deny access
308-
raise HTTPException(
309-
status_code=status.HTTP_403_FORBIDDEN,
310-
detail="You have unsufficient rights to access the service",
311-
)
312-
# check the user has write access to this service
313-
writable_service = await services_repo.get_service(
314-
service_key,
315-
service_version,
316-
gids=[group.gid for group in user_groups],
317-
write_access=True,
318-
product_name=x_simcore_products_name,
319-
)
320-
if not writable_service:
321-
# deny access
322-
raise HTTPException(
323-
status_code=status.HTTP_403_FORBIDDEN,
324-
detail="You have unsufficient rights to modify the service",
325-
)
326-
327-
# let's modify the service then
328-
await services_repo.update_service(
329-
ServiceMetaDataAtDB(
330-
key=service_key,
331-
version=service_version,
332-
**updated_service.model_dump(exclude_unset=True),
333-
)
334-
)
335-
# let's modify the service access rights (they can be added/removed/modified)
336-
current_gids_in_db = [
337-
r.gid
338-
for r in await services_repo.get_service_access_rights(
339-
service_key, service_version, product_name=x_simcore_products_name
340-
)
341-
]
342-
343-
if updated_service.access_rights:
344-
# start by updating/inserting new entries
345-
assert x_simcore_products_name # nosec
346-
new_access_rights = [
347-
ServiceAccessRightsAtDB(
348-
key=service_key,
349-
version=service_version,
350-
gid=gid,
351-
execute_access=rights.execute_access,
352-
write_access=rights.write_access,
353-
product_name=x_simcore_products_name,
354-
)
355-
for gid, rights in updated_service.access_rights.items()
356-
]
357-
await services_repo.upsert_service_access_rights(new_access_rights)
358-
359-
# then delete the ones that were removed
360-
removed_gids = [
361-
gid
362-
for gid in current_gids_in_db
363-
if gid not in updated_service.access_rights
364-
]
365-
deleted_access_rights = [
366-
ServiceAccessRightsAtDB(
367-
key=service_key,
368-
version=service_version,
369-
gid=gid,
370-
product_name=x_simcore_products_name,
371-
)
372-
for gid in removed_gids
373-
]
374-
await services_repo.delete_service_access_rights(deleted_access_rights)
375-
376-
# now return the service
377-
assert x_simcore_products_name # nosec
378-
return await get_service(
379-
user_id=user_id,
380-
service_in_manifest=await get_service_from_manifest(
381-
service_key, service_version, director_client
382-
),
383-
groups_repository=groups_repository,
384-
services_repo=services_repo,
385-
x_simcore_products_name=x_simcore_products_name,
386-
)

0 commit comments

Comments
 (0)