|
| 1 | +from fastapi import APIRouter, Depends, Response, status |
| 2 | +from api.dependencies.workspaces import get_workspace_by_id_from_path |
| 3 | +from models.schemas.workspace_users import UserRoleAssignmentRequest |
| 4 | +from resources import strings |
| 5 | +from services.authentication import get_access_service |
| 6 | +from models.schemas.users import UsersInResponse, AssignableUsersInResponse, WorkspaceUserOperationResponse |
| 7 | +from models.schemas.roles import RolesInResponse |
| 8 | +from services.authentication import get_current_admin_user, get_current_workspace_owner_or_researcher_user_or_airlock_manager_or_tre_admin |
| 9 | + |
| 10 | +workspaces_users_admin_router = APIRouter(dependencies=[Depends(get_current_admin_user)]) |
| 11 | +workspaces_users_shared_router = APIRouter(dependencies=[Depends(get_current_workspace_owner_or_researcher_user_or_airlock_manager_or_tre_admin)]) |
| 12 | + |
| 13 | + |
| 14 | +@workspaces_users_shared_router.get("/workspaces/{workspace_id}/users", response_model=UsersInResponse, name=strings.API_GET_WORKSPACE_USERS) |
| 15 | +async def get_workspace_users(workspace=Depends(get_workspace_by_id_from_path), access_service=Depends(get_access_service)) -> UsersInResponse: |
| 16 | + users = access_service.get_workspace_users(workspace) |
| 17 | + return UsersInResponse(users=users) |
| 18 | + |
| 19 | + |
| 20 | +@workspaces_users_admin_router.get("/workspaces/{workspace_id}/assignable-users", response_model=AssignableUsersInResponse, name=strings.API_GET_ASSIGNABLE_USERS) |
| 21 | +async def get_assignable_users(filter: str = "", maxResultCount: int = 5, access_service=Depends(get_access_service)) -> AssignableUsersInResponse: |
| 22 | + assignable_users = access_service.get_assignable_users(filter, maxResultCount) |
| 23 | + return AssignableUsersInResponse(assignable_users=assignable_users) |
| 24 | + |
| 25 | + |
| 26 | +@workspaces_users_admin_router.get("/workspaces/{workspace_id}/roles", response_model=RolesInResponse, name=strings.API_GET_WORKSPACE_ROLES) |
| 27 | +async def get_workspace_roles(workspace=Depends(get_workspace_by_id_from_path), access_service=Depends(get_access_service)) -> RolesInResponse: |
| 28 | + roles = access_service.get_workspace_roles(workspace) |
| 29 | + return RolesInResponse(roles=roles) |
| 30 | + |
| 31 | + |
| 32 | +@workspaces_users_admin_router.post("/workspaces/{workspace_id}/users/assign", status_code=status.HTTP_202_ACCEPTED, name=strings.API_ASSIGN_WORKSPACE_USER) |
| 33 | +async def assign_workspace_user(response: Response, userRoleAssignmentRequest: UserRoleAssignmentRequest, workspace=Depends(get_workspace_by_id_from_path), access_service=Depends(get_access_service)) -> WorkspaceUserOperationResponse: |
| 34 | + |
| 35 | + for user_id in userRoleAssignmentRequest.user_ids: |
| 36 | + access_service.assign_workspace_user( |
| 37 | + user_id, |
| 38 | + workspace, |
| 39 | + userRoleAssignmentRequest.role_id |
| 40 | + ) |
| 41 | + |
| 42 | + return WorkspaceUserOperationResponse(user_ids=userRoleAssignmentRequest.user_ids, role_id=userRoleAssignmentRequest.role_id) |
| 43 | + |
| 44 | + |
| 45 | +@workspaces_users_admin_router.delete("/workspaces/{workspace_id}/users/assign", status_code=status.HTTP_202_ACCEPTED, name=strings.API_REMOVE_WORKSPACE_USER_ASSIGNMENT) |
| 46 | +async def remove_workspace_user_assignment(user_id: str, |
| 47 | + role_id: str, |
| 48 | + workspace=Depends(get_workspace_by_id_from_path), |
| 49 | + access_service=Depends(get_access_service)) -> WorkspaceUserOperationResponse: |
| 50 | + |
| 51 | + access_service.remove_workspace_role_user_assignment( |
| 52 | + user_id, |
| 53 | + role_id, |
| 54 | + workspace |
| 55 | + ) |
| 56 | + |
| 57 | + return WorkspaceUserOperationResponse(user_ids=[user_id], role_id=role_id) |
0 commit comments