Skip to content

Commit 44db493

Browse files
committed
fix(arhcived-project-tasks): only allow editing the project tasks when the project is not archived
1 parent 3b3629a commit 44db493

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

backend/timed/permissions.py

+7
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ def has_object_permission(self, request, view, _obj):
6565
return self.has_permission(request, view)
6666

6767

68+
class IsProjectActive(BasePermission):
69+
"""Allow Only the project that is not archived."""
70+
71+
def has_object_permission(self, _request, _view, task):
72+
return not task.project.archived
73+
74+
6875
class IsAuthenticated(IsAuthenticated):
6976
"""Support mixing permission IsAuthenticated with object permission.
7077

backend/timed/projects/views.py

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
IsCustomer,
1414
IsInternal,
1515
IsManager,
16+
IsProjectActive,
1617
IsReadOnly,
1718
IsSuperUser,
1819
IsUpdateOnly,
@@ -177,6 +178,8 @@ class TaskViewSet(ModelViewSet):
177178
(
178179
# superuser may edit all tasks
179180
IsSuperUser
181+
# only superuser can update tasks of archived projects
182+
| (IsUpdateOnly & IsProjectActive)
180183
# managers may edit all tasks
181184
| IsManager
182185
# all authenticated users may read all tasks

frontend/app/projects/template.hbs

+16-1
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@
201201
class="rounded"
202202
data-test-name
203203
@required={{true}}
204+
@disabled={{this.selectedProject.archived}}
204205
/>
205206

206207
<f.input @labelComponent="void" @name="estimatedTime" as |fi|>
@@ -211,6 +212,7 @@
211212
<Durationpicker
212213
data-test-estimated-time={{true}}
213214
@value={{fi.value}}
215+
@disabled={{this.selectedProject.archived}}
214216
@onChange={{if
215217
remainingEffortTracking
216218
(queue fi.update (fn this.updateRemainingEffort f.model))
@@ -226,6 +228,7 @@
226228
class="rounded"
227229
data-test-reference
228230
@required={{false}}
231+
@disabled={{this.selectedProject.archived}}
229232
/>
230233

231234
{{#if remainingEffortTracking}}
@@ -244,6 +247,7 @@
244247
@value={{fi.value}}
245248
@min={{0}}
246249
@onChange={{fi.update}}
250+
@disabled={{this.selectedProject.archived}}
247251
/>
248252
</div>
249253
</f.input>
@@ -257,6 +261,7 @@
257261
@checked={{this.selectedTask.archived}}
258262
@value={{fi.value}}
259263
@onChange={{fi.update}}
264+
@disabled={{this.selectedProject.archived}}
260265
/>
261266
</f.input>
262267

@@ -267,7 +272,17 @@
267272
type="button"
268273
{{on "click" (fn (mut this.selectedTask) null)}}
269274
>Cancel</button>
270-
<f.submit data-test-save @disabled={{f.model.isInvalid}} />
275+
<f.submit
276+
data-test-save
277+
title={{if
278+
this.selectedProject.archived
279+
"You can not update or add tasks to an archived project"
280+
}}
281+
@disabled={{or
282+
f.model.isInvalid
283+
this.selectedProject.archived
284+
}}
285+
/>
271286
</div>
272287
</ValidatedForm>
273288
</div>

0 commit comments

Comments
 (0)