Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
4103b34
feat: add functions set permissions endpoint
giancarloromeo Aug 18, 2025
aefe339
feat: add function permissions delete
giancarloromeo Aug 18, 2025
197a915
fix: openapi-spec
giancarloromeo Aug 18, 2025
3b8694a
fix: schema
giancarloromeo Aug 18, 2025
b389b90
fix: openapi-spec
giancarloromeo Aug 18, 2025
6f80ef8
feat: return updated access rights
giancarloromeo Aug 18, 2025
11f7b17
fix: access right permissions when getting
giancarloromeo Aug 18, 2025
14a6599
feat: add get permissions
giancarloromeo Aug 18, 2025
fd407bd
fix: route name
giancarloromeo Aug 18, 2025
d176898
fix: route name
giancarloromeo Aug 18, 2025
57cec6c
fix: result validation
giancarloromeo Aug 18, 2025
3f917d4
Merge branch 'master' into is1905/add-functions-permissions-management
giancarloromeo Aug 18, 2025
cfcf55d
fix: permissions
giancarloromeo Aug 18, 2025
0b5a52f
tests: add tests
giancarloromeo Aug 18, 2025
7e3608c
Merge branch 'is1905/add-functions-permissions-management' of github.…
giancarloromeo Aug 18, 2025
4a98be7
fix: pylint
giancarloromeo Aug 18, 2025
b243dc3
fix: access rights no more nullable
giancarloromeo Aug 19, 2025
3af57b6
fix: exceptions
giancarloromeo Aug 19, 2025
c3d41d1
fix: openapi-spec
giancarloromeo Aug 19, 2025
9c6c4e1
Update services/web/server/src/simcore_service_webserver/api/v0/opena…
giancarloromeo Aug 19, 2025
0d32830
Merge branch 'master' into is1905/add-functions-permissions-management
giancarloromeo Aug 19, 2025
18f2e68
fix: endpoint summary
giancarloromeo Aug 19, 2025
e30c60d
Merge branch 'master' into is1905/add-functions-permissions-management
giancarloromeo Aug 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions api/specs/web-server/_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,18 @@
from _common import as_query
from fastapi import APIRouter, Depends, status
from models_library.api_schemas_webserver.functions import (
FunctionGroupAccessRightsGet,
FunctionGroupAccessRightsUpdate,
FunctionToRegister,
RegisteredFunctionGet,
RegisteredFunctionUpdate,
)
from models_library.generics import Envelope
from models_library.groups import GroupID
from simcore_service_webserver._meta import API_VTAG
from simcore_service_webserver.functions._controller._functions_rest import (
FunctionGroupPathParams,
)
from simcore_service_webserver.functions._controller._functions_rest_schemas import (
FunctionGetQueryParams,
FunctionPathParams,
Expand Down Expand Up @@ -75,3 +81,31 @@ async def update_function(
async def delete_function(
_path: Annotated[FunctionPathParams, Depends()],
): ...


@router.get(
"/functions/{function_id}/groups",
response_model=Envelope[dict[GroupID, FunctionGroupAccessRightsGet]],
)
async def get_function_groups(
_path: Annotated[FunctionPathParams, Depends()],
): ...


@router.put(
"/functions/{function_id}/groups/{group_id}",
response_model=Envelope[FunctionGroupAccessRightsGet],
)
async def update_function_group(
_path: Annotated[FunctionGroupPathParams, Depends()],
_body: FunctionGroupAccessRightsUpdate,
): ...


@router.delete(
"/functions/{function_id}/groups/{group_id}",
status_code=status.HTTP_204_NO_CONTENT,
)
async def delete_function_group(
_path: Annotated[FunctionGroupPathParams, Depends()],
): ...
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

from ..functions import (
Function,
FunctionAccessRights,
FunctionBase,
FunctionClass,
FunctionClassSpecificData,
Expand Down Expand Up @@ -49,6 +48,7 @@
UnsupportedFunctionClassError,
UnsupportedFunctionFunctionJobClassCombinationError,
)
from ..groups import GroupID
from ..projects import ProjectID
from ._base import InputSchema, OutputSchema

Expand Down Expand Up @@ -114,11 +114,23 @@
]


class FunctionGroupAccessRightsGet(OutputSchema):
read: bool
write: bool
execute: bool


class FunctionGroupAccessRightsUpdate(InputSchema):
read: bool
write: bool
execute: bool


class RegisteredSolverFunctionGet(RegisteredSolverFunction, OutputSchema):
uid: Annotated[FunctionID, Field(alias="uuid")]
created_at: Annotated[datetime.datetime, Field(alias="creationDate")]
modified_at: Annotated[datetime.datetime, Field(alias="lastChangeDate")]
access_rights: FunctionAccessRights | None = None
access_rights: dict[GroupID, FunctionGroupAccessRightsGet]
thumbnail: HttpUrl | None = None


Expand All @@ -127,7 +139,7 @@ class RegisteredProjectFunctionGet(RegisteredProjectFunction, OutputSchema):
project_id: Annotated[ProjectID, Field(alias="templateId")]
created_at: Annotated[datetime.datetime, Field(alias="creationDate")]
modified_at: Annotated[datetime.datetime, Field(alias="lastChangeDate")]
access_rights: FunctionAccessRights | None = None
access_rights: dict[GroupID, FunctionGroupAccessRightsGet]
thumbnail: HttpUrl | None = None


Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
openapi: 3.1.0
info:
title: simcore-service-webserver
Expand Down Expand Up @@ -3761,6 +3761,86 @@
responses:
'204':
description: Successful Response
/v0/functions/{function_id}/groups:
get:
tags:
- functions
summary: Get Function Groups
operationId: get_function_groups
parameters:
- name: function_id
in: path
required: true
schema:
type: string
format: uuid
title: Function Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope_dict_Annotated_int__Gt___FunctionGroupAccessRightsGet__'
/v0/functions/{function_id}/groups/{group_id}:
put:
tags:
- functions
summary: Update Function Group
operationId: update_function_group
parameters:
- name: function_id
in: path
required: true
schema:
type: string
format: uuid
title: Function Id
- name: group_id
in: path
required: true
schema:
type: integer
exclusiveMinimum: true
title: Group Id
minimum: 0
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FunctionGroupAccessRightsUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope_FunctionGroupAccessRightsGet_'
delete:
tags:
- functions
summary: Delete Function Group
operationId: delete_function_group
parameters:
- name: function_id
in: path
required: true
schema:
type: string
format: uuid
title: Function Id
- name: group_id
in: path
required: true
schema:
type: integer
exclusiveMinimum: true
title: Group Id
minimum: 0
responses:
'204':
description: Successful Response
/v0/tasks:
get:
tags:
Expand Down Expand Up @@ -10802,6 +10882,19 @@
title: Error
type: object
title: Envelope[FolderGet]
Envelope_FunctionGroupAccessRightsGet_:
properties:
data:
anyOf:
- $ref: '#/components/schemas/FunctionGroupAccessRightsGet'
- type: 'null'
error:
anyOf:
- {}
- type: 'null'
title: Error
type: object
title: Envelope[FunctionGroupAccessRightsGet]
Envelope_GetProjectInactivityResponse_:
properties:
data:
Expand Down Expand Up @@ -11511,6 +11604,22 @@
title: Error
type: object
title: Envelope[_ProjectNodePreview]
Envelope_dict_Annotated_int__Gt___FunctionGroupAccessRightsGet__:
properties:
data:
anyOf:
- additionalProperties:
$ref: '#/components/schemas/FunctionGroupAccessRightsGet'
type: object
- type: 'null'
title: Data
error:
anyOf:
- {}
- type: 'null'
title: Error
type: object
title: Envelope[dict[Annotated[int, Gt], FunctionGroupAccessRightsGet]]
Envelope_dict_Annotated_str__StringConstraints___ImageResources__:
properties:
data:
Expand Down Expand Up @@ -12632,23 +12741,40 @@
required:
- name
title: FolderReplaceBodyParams
FunctionAccessRights:
FunctionGroupAccessRightsGet:
properties:
read:
type: boolean
title: Read
write:
type: boolean
title: Write
execute:
type: boolean
title: Execute
type: object
required:
- read
- write
- execute
title: FunctionGroupAccessRightsGet
FunctionGroupAccessRightsUpdate:
properties:
read:
type: boolean
title: Read
default: false
write:
type: boolean
title: Write
default: false
execute:
type: boolean
title: Execute
default: false
additionalProperties: false
type: object
title: FunctionAccessRights
required:
- read
- write
- execute
title: FunctionGroupAccessRightsUpdate
GetProjectInactivityResponse:
properties:
is_inactive:
Expand Down Expand Up @@ -16386,8 +16512,11 @@
title: Templateid
accessRights:
anyOf:
- $ref: '#/components/schemas/FunctionAccessRights'
- additionalProperties:
$ref: '#/components/schemas/FunctionGroupAccessRightsGet'
type: object
- type: 'null'
title: Accessrights
thumbnail:
anyOf:
- type: string
Expand Down Expand Up @@ -16465,8 +16594,11 @@
title: Solverversion
accessRights:
anyOf:
- $ref: '#/components/schemas/FunctionAccessRights'
- additionalProperties:
$ref: '#/components/schemas/FunctionGroupAccessRightsGet'
type: object
- type: 'null'
title: Accessrights
thumbnail:
anyOf:
- type: string
Expand Down
Loading
Loading