Skip to content

Commit 167dd64

Browse files
authored
Merge pull request #255 from LabKey/fb_merge_25.3_to_develop
Merge discvr-25.3 to develop
2 parents 5c625e5 + 5ee15e6 commit 167dd64

File tree

3 files changed

+51
-10
lines changed

3 files changed

+51
-10
lines changed

mcc/resources/queries/mcc/animalRequests.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,18 @@ function beforeUpsert(row, oldRow, errors) {
3636

3737
row.status = row.status || 'Draft'
3838

39-
if (!triggerHelper.hasPermission(row.status)) {
40-
errors._form = 'Insufficient permissions to update request with status: ' + row.status;
39+
// This logic here is that the user needs update permissions on the original status, and insert permissions to the new one:
40+
if (oldRow) {
41+
if (oldRow.status && !triggerHelper.hasUpdatePermission(oldRow.status)) {
42+
errors._form = 'Insufficient permissions to update request with status: ' + row.status;
43+
}
44+
else if (!oldRow.status) {
45+
console.error('MCC request being submitted without a value for oldRow.status!')
46+
}
47+
}
4148

49+
if (!triggerHelper.hasInsertPermission(row.status)) {
50+
errors._form = 'Insufficient permissions to create request with status: ' + row.status;
4251
}
4352
}
4453

@@ -72,6 +81,7 @@ function beforeDelete(row, errors){
7281
return;
7382
}
7483

84+
//
7585
if (!triggerHelper.hasPermission(row.status)) {
7686
errors._form = 'Insufficient permissions to delete this request';
7787
return;

mcc/src/org/labkey/mcc/MccManager.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,38 @@ public enum RequestStatus
5050
Submitted(2, "Submitted", MccRequestorPermission.class),
5151
RabReview(3, "RAB Review", MccRequestAdminPermission.class),
5252
PendingDecision(4, "Decision Pending", MccFinalReviewPermission.class),
53-
Approved(5, "Approved", MccRequestAdminPermission.class),
54-
Rejected(6, "Rejected", MccRequestAdminPermission.class),
53+
Approved(5, "Approved", MccRequestAdminPermission.class, MccFinalReviewPermission.class),
54+
Rejected(6, "Rejected", MccRequestAdminPermission.class, MccFinalReviewPermission.class),
5555
Processing(7, "Processing", MccRequestAdminPermission.class),
5656
Fulfilled(8, "Fulfilled", MccRequestAdminPermission.class),
5757
Withdrawn(9, "Withdrawn", MccRequestorPermission.class);
5858

5959
int sortOrder;
6060
String label;
61-
Class<? extends Permission> editPermission;
61+
Class<? extends Permission> updatePermission;
62+
Class<? extends Permission> insertPermission;
6263

6364
RequestStatus(int sortOrder, String label, Class<? extends Permission> editPermission)
65+
{
66+
this(sortOrder, label, editPermission, editPermission);
67+
}
68+
69+
RequestStatus(int sortOrder, String label, Class<? extends Permission> updatePermission, Class<? extends Permission> insertPermission)
6470
{
6571
this.sortOrder = sortOrder;
6672
this.label = label;
67-
this.editPermission = editPermission;
73+
this.updatePermission = updatePermission;
74+
this.insertPermission= insertPermission;
75+
}
76+
77+
public boolean canUpdate(User u, Container c)
78+
{
79+
return c.hasPermission(u, this.updatePermission);
6880
}
6981

70-
public boolean canEdit(User u, Container c)
82+
public boolean canInsert(User u, Container c)
7183
{
72-
return c.hasPermission(u, this.editPermission);
84+
return c.hasPermission(u, this.insertPermission);
7385
}
7486

7587
public String getLabel()

mcc/src/org/labkey/mcc/query/TriggerHelper.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,30 @@ public void cascadeDelete(String schemaName, String queryName, String keyField,
212212
}
213213
}
214214

215-
public boolean hasPermission(String status)
215+
public boolean hasUpdatePermission(String status)
216+
{
217+
return hasPermission(status, false);
218+
}
219+
220+
public boolean hasInsertPermission(String status)
221+
{
222+
return hasPermission(status, true);
223+
}
224+
225+
private boolean hasPermission(String status, boolean forInsert)
216226
{
217227
try
218228
{
219-
return MccManager.RequestStatus.resolveStatus(status).canEdit(_user, _container);
229+
MccManager.RequestStatus s = MccManager.RequestStatus.resolveStatus(status);
230+
if (forInsert)
231+
{
232+
return MccManager.RequestStatus.resolveStatus(status).canInsert(_user, _container);
233+
}
234+
else
235+
{
236+
return MccManager.RequestStatus.resolveStatus(status).canUpdate(_user, _container);
237+
}
238+
220239
}
221240
catch (IllegalArgumentException e)
222241
{

0 commit comments

Comments
 (0)