88 ProjectOutputGet ,
99)
1010from models_library .basic_types import KeyIDStr
11- from models_library .projects import ProjectID
1211from models_library .projects_nodes import Node
1312from models_library .projects_nodes_io import NodeID
14- from models_library .users import UserID
1513from models_library .utils .fastapi_encoders import jsonable_encoder
1614from models_library .utils .services_io import JsonSchemaDict
1715from pydantic import BaseModel , Field , TypeAdapter
2624from ...models import ClientSessionHeaderParams
2725from ...security .decorators import permission_required
2826from ...utils_aiohttp import envelope_json_response
29- from .. import _ports_service , _projects_service
30- from .._access_rights_service import check_user_project_permission
27+ from .. import _access_rights_service , _nodes_service , _ports_service
3128from .._projects_repository_legacy import ProjectDBAPI
32- from ..models import ProjectDict
3329from ._rest_exceptions import handle_plugin_requests_exceptions
3430from ._rest_schemas import AuthenticatedRequestContext , ProjectPathParams
3531
3632log = logging .getLogger (__name__ )
3733
3834
39- async def _get_validated_workbench_model (
40- app : web .Application , project_id : ProjectID , user_id : UserID
41- ) -> dict [NodeID , Node ]:
42- project : ProjectDict = await _projects_service .get_project_for_user (
43- app ,
44- project_uuid = f"{ project_id } " ,
45- user_id = user_id ,
46- include_state = False ,
47- )
48-
49- return TypeAdapter (dict [NodeID , Node ]).validate_python (project ["workbench" ])
50-
51-
5235routes = web .RouteTableDef ()
5336
5437
@@ -66,9 +49,17 @@ async def get_project_inputs(request: web.Request) -> web.Response:
6649
6750 assert request .app # nosec
6851
69- workbench = await _get_validated_workbench_model (
70- app = request .app , project_id = path_params .project_id , user_id = req_ctx .user_id
52+ await _access_rights_service .check_user_project_permission (
53+ request .app ,
54+ product_name = req_ctx .product_name ,
55+ user_id = req_ctx .user_id ,
56+ project_id = path_params .project_id ,
57+ permission = "read" ,
58+ )
59+ workbench = await _nodes_service .get_project_nodes_map (
60+ app = request .app , project_id = path_params .project_id
7161 )
62+
7263 inputs : dict [NodeID , Any ] = _ports_service .get_project_inputs (workbench )
7364
7465 return envelope_json_response (
@@ -94,8 +85,15 @@ async def update_project_inputs(request: web.Request) -> web.Response:
9485
9586 assert request .app # nosec
9687
97- workbench = await _get_validated_workbench_model (
98- app = request .app , project_id = path_params .project_id , user_id = req_ctx .user_id
88+ await _access_rights_service .check_user_project_permission (
89+ request .app ,
90+ product_name = req_ctx .product_name ,
91+ user_id = req_ctx .user_id ,
92+ project_id = path_params .project_id ,
93+ permission = "write" , # because we are updating inputs later
94+ )
95+ workbench = await _nodes_service .get_project_nodes_map (
96+ app = request .app , project_id = path_params .project_id
9997 )
10098 current_inputs : dict [NodeID , Any ] = _ports_service .get_project_inputs (workbench )
10199
@@ -112,14 +110,6 @@ async def update_project_inputs(request: web.Request) -> web.Response:
112110 )
113111
114112 # patch workbench
115- await check_user_project_permission (
116- request .app ,
117- project_id = path_params .project_id ,
118- user_id = req_ctx .user_id ,
119- product_name = req_ctx .product_name ,
120- permission = "write" ,
121- )
122-
123113 assert db # nosec
124114 updated_project , _ = await db .update_project_multiple_node_data (
125115 user_id = req_ctx .user_id ,
@@ -159,9 +149,17 @@ async def get_project_outputs(request: web.Request) -> web.Response:
159149
160150 assert request .app # nosec
161151
162- workbench = await _get_validated_workbench_model (
163- app = request .app , project_id = path_params .project_id , user_id = req_ctx .user_id
152+ await _access_rights_service .check_user_project_permission (
153+ request .app ,
154+ product_name = req_ctx .product_name ,
155+ user_id = req_ctx .user_id ,
156+ project_id = path_params .project_id ,
157+ permission = "read" ,
164158 )
159+ workbench = await _nodes_service .get_project_nodes_map (
160+ app = request .app , project_id = path_params .project_id
161+ )
162+
165163 outputs : dict [NodeID , Any ] = await _ports_service .get_project_outputs (
166164 request .app , project_id = path_params .project_id , workbench = workbench
167165 )
@@ -206,10 +204,16 @@ async def list_project_metadata_ports(request: web.Request) -> web.Response:
206204
207205 assert request .app # nosec
208206
209- workbench = await _get_validated_workbench_model (
210- app = request .app , project_id = path_params .project_id , user_id = req_ctx .user_id
207+ await _access_rights_service .check_user_project_permission (
208+ request .app ,
209+ product_name = req_ctx .product_name ,
210+ user_id = req_ctx .user_id ,
211+ project_id = path_params .project_id ,
212+ permission = "read" ,
213+ )
214+ workbench = await _nodes_service .get_project_nodes_map (
215+ app = request .app , project_id = path_params .project_id
211216 )
212-
213217 return envelope_json_response (
214218 [
215219 ProjectMetadataPortGet (
0 commit comments