Skip to content

Commit 222b59d

Browse files
committed
Removed user_id column from function access tables
1 parent 9f1e354 commit 222b59d

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@ class FunctionGroupAccessRights(FunctionAccessRights):
277277

278278

279279
class FunctionAccessRightsDB(BaseModel):
280-
user_id: UserID | None = None
281280
group_id: GroupID | None = None
282281
read: bool = False
283282
write: bool = False

services/web/server/src/simcore_service_webserver/functions/_functions_repository.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@
6262
get_columns_from_db_model,
6363
transaction_context,
6464
)
65+
from simcore_service_webserver.groups.api import list_all_user_groups_ids
6566
from simcore_service_webserver.users.api import get_user_primary_group_id
6667
from sqlalchemy import Text, cast
6768
from sqlalchemy.ext.asyncio import AsyncConnection
6869
from sqlalchemy.sql import func
6970

70-
from ..db.models import groups, user_to_groups
7171
from ..db.plugin import get_asyncpg_engine
7272

7373
_FUNCTIONS_TABLE_COLS = get_columns_from_db_model(functions_table, RegisteredFunctionDB)
@@ -299,12 +299,13 @@ async def list_functions(
299299
) -> tuple[list[RegisteredFunctionDB], PageMetaInfoLimitOffset]:
300300

301301
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
302-
# Filter functions by user read access
302+
user_groups = await list_all_user_groups_ids(app, user_id=user_id)
303+
303304
subquery = (
304305
functions_access_rights_table.select()
305306
.with_only_columns(functions_access_rights_table.c.function_uuid)
306307
.where(
307-
functions_access_rights_table.c.user_id == user_id,
308+
functions_access_rights_table.c.group_id.in_(user_groups),
308309
functions_access_rights_table.c.read,
309310
)
310311
)
@@ -348,11 +349,13 @@ async def list_function_jobs(
348349
) -> tuple[list[RegisteredFunctionJobDB], PageMetaInfoLimitOffset]:
349350

350351
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
352+
user_groups = await list_all_user_groups_ids(app, user_id=user_id)
353+
351354
access_subquery = (
352355
function_jobs_access_rights_table.select()
353356
.with_only_columns(function_jobs_access_rights_table.c.function_job_uuid)
354357
.where(
355-
function_jobs_access_rights_table.c.user_id == user_id,
358+
function_jobs_access_rights_table.c.group_id.in_(user_groups),
356359
function_jobs_access_rights_table.c.read,
357360
)
358361
)
@@ -434,17 +437,21 @@ async def list_function_job_collections(
434437
.where(function_jobs_table.c.function_uuid == function_id)
435438
)
436439
filter_condition = function_job_collections_table.c.uuid.in_(subquery)
440+
user_groups = await list_all_user_groups_ids(app, user_id=user_id)
437441

438442
access_subquery = (
439443
function_job_collections_access_rights_table.select()
440444
.with_only_columns(
441445
function_job_collections_access_rights_table.c.function_job_collection_uuid
442446
)
443447
.where(
444-
function_job_collections_access_rights_table.c.user_id == user_id,
448+
function_job_collections_access_rights_table.c.group_id.in_(
449+
user_groups
450+
),
445451
function_job_collections_access_rights_table.c.read,
446452
)
447453
)
454+
448455
filter_and_access_condition = sqlalchemy.and_(
449456
filter_condition,
450457
function_job_collections_table.c.uuid.in_(access_subquery),
@@ -877,18 +884,7 @@ async def get_user_permissions(
877884
assert access_rights_table is not None # nosec
878885

879886
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
880-
# Get all groups the user belongs to
881-
user_groups_result = await conn.stream(
882-
sqlalchemy.select(groups.c.gid)
883-
.select_from(
884-
user_to_groups.join(groups, user_to_groups.c.gid == groups.c.gid),
885-
)
886-
.where(user_to_groups.c.uid == user_id)
887-
)
888-
user_groups = [row["gid"] for row in await user_groups_result.all()]
889-
890-
if not user_groups:
891-
return None
887+
user_groups = await list_all_user_groups_ids(app, user_id=user_id)
892888

893889
# Combine permissions for all groups the user belongs to
894890
result = await conn.stream(

0 commit comments

Comments
 (0)