diff --git a/atst/domain/workspaces.py b/atst/domain/workspaces.py index 50c44695..4adf0567 100644 --- a/atst/domain/workspaces.py +++ b/atst/domain/workspaces.py @@ -53,6 +53,15 @@ class Workspaces(object): return workspace + @classmethod + def get_with_members(cls, user, workspace_id): + workspace = Workspaces.get(user, workspace_id) + if not Authorization.has_workspace_permission( + user, workspace, Permissions.VIEW_WORKSPACE_MEMBERS + ): + raise UnauthorizedError(user, "view workspace members") + return workspace + @classmethod def get_many(cls, user): workspaces = ( diff --git a/atst/routes/workspaces.py b/atst/routes/workspaces.py index 190b5eff..647afda9 100644 --- a/atst/routes/workspaces.py +++ b/atst/routes/workspaces.py @@ -63,13 +63,7 @@ def show_workspace(workspace_id): @bp.route("/workspaces//members") def workspace_members(workspace_id): - user = g.current_user - workspace = Workspaces.get(user, workspace_id) - if not Authorization.has_workspace_permission( - user, workspace, Permissions.VIEW_WORKSPACE_MEMBERS - ): - raise UnauthorizedError(user, "view workspace members") - + workspace = Workspaces.get_with_members(g.current_user, workspace_id) return render_template("workspace_members.html", workspace=workspace) diff --git a/tests/domain/test_workspaces.py b/tests/domain/test_workspaces.py index 296c16d9..85d18735 100644 --- a/tests/domain/test_workspaces.py +++ b/tests/domain/test_workspaces.py @@ -155,3 +155,19 @@ def test_need_permission_to_update_workspace_user_role(): with pytest.raises(UnauthorizedError): Workspaces.update_member(random_user, workspace, member, role_name) + + +def test_owner_can_view_workspace_members(): + owner = UserFactory.create() + workspace = Workspaces.create(RequestFactory.create(creator=owner)) + workspace = Workspaces.get_with_members(owner, workspace.id) + + assert workspace + + +def test_ccpo_can_view_workspace_members(): + workspace = Workspaces.create(RequestFactory.create(creator=UserFactory.create())) + ccpo = UserFactory.from_atat_role("ccpo") + workspace = Workspaces.get_with_members(ccpo, workspace.id) + + assert workspace