Skip to content

Commit a17a754

Browse files
authored
Merge pull request #5489 from opensafely-core/tomodwyer/project-detail
Replace `is_member` with `can_manage_project` in project detail template
2 parents 1816131 + fff98cf commit a17a754

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

jobserver/views/projects.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ def get(self, request, *args, **kwargs):
4141
request.user, Permission.WORKSPACE_CREATE, project=project
4242
)
4343

44-
is_member = project.members.filter(username=request.user.username).exists()
44+
can_manage_project = has_permission(
45+
request.user, Permission.PROJECT_MANAGE, project=project
46+
)
4547

4648
memberships = project.memberships.select_related("user").order_by(
4749
Lower("user__fullname"), "user__username"
@@ -85,8 +87,8 @@ def get(self, request, *args, **kwargs):
8587

8688
context = {
8789
"can_create_workspaces": can_create_workspaces,
90+
"can_manage_project": can_manage_project,
8891
"first_job_ran_at": first_job_ran_at,
89-
"is_member": is_member,
9092
"memberships": memberships,
9193
"outputs": self.get_outputs(workspaces),
9294
"project": project,

templates/project/detail.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
View logs
7979
{% icon_queue_list_outline class="h-4 w-4 ml-2 -mr-2" %}
8080
{% /button %}
81-
{% if is_member %}
81+
{% if can_manage_project %}
8282
{% #button class="shrink-0" href=project.get_edit_url type="link" variant="secondary" %}
8383
Edit project
8484
{% icon_pencil_outline class="h-4 w-4 ml-2 -mr-2" %}

tests/unit/jobserver/views/test_projects.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,44 @@ def test_projectdetail_with_no_releases(rf):
219219
assert "Outputs" not in response.rendered_content
220220

221221

222+
def test_projectdetail_hides_edit_project_for_member_without_manage_permission(
223+
rf, project_membership
224+
):
225+
project = ProjectFactory(org=OrgFactory())
226+
user = UserFactory()
227+
project_membership(project=project, user=user)
228+
229+
request = rf.get("/")
230+
request.user = user
231+
232+
response = ProjectDetail.as_view(get_github_api=FakeGitHubAPI)(
233+
request, project_slug=project.slug
234+
)
235+
236+
assert "Edit project" not in response.rendered_content
237+
238+
239+
def test_projectdetail_shows_edit_project_for_user_with_manage_permission(
240+
rf, project_membership, role_factory
241+
):
242+
project = ProjectFactory(org=OrgFactory())
243+
user = UserFactory()
244+
project_membership(
245+
project=project,
246+
user=user,
247+
roles=[role_factory(permission=Permission.PROJECT_MANAGE)],
248+
)
249+
250+
request = rf.get("/")
251+
request.user = user
252+
253+
response = ProjectDetail.as_view(get_github_api=FakeGitHubAPI)(
254+
request, project_slug=project.slug
255+
)
256+
257+
assert "Edit project" in response.rendered_content
258+
259+
222260
def test_projectdetail_unknown_project(rf):
223261
request = rf.get("/")
224262
request.user = UserFactory()

0 commit comments

Comments
 (0)