Skip to content

Commit 2de0b69

Browse files
authored
Merge pull request #10084 from driusan/PushForwardv2701
Push v27.0.1 into main
2 parents d1c2fc0 + f668585 commit 2de0b69

File tree

8 files changed

+87
-11
lines changed

8 files changed

+87
-11
lines changed

SQL/Archive/27.0/2025-01-15-Imaging-Uploader-Site-Project-Permissions.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
UPDATE permissions SET code = 'imaging_uploader_allsites', description='Imaging Scans - All Sites' WHERE code='imaging_uploader';
2-
INSERT INTO permissions (code, description, moduleID, `action`, categoryID)
2+
3+
INSERT IGNORE INTO permissions (code, description, moduleID, `action`, categoryID)
34
SELECT 'imaging_uploader_ownsites', 'Imaging Scans - Own Sites', ID, 'View/Upload', 2 FROM modules WHERE Name='imaging_uploader';
4-
INSERT INTO permissions (code, description, moduleID, `action`, categoryID)
5+
INSERT IGNORE INTO permissions (code, description, moduleID, `action`, categoryID)
56
SELECT 'imaging_uploader_nosessionid', 'Uploads with No Session Information', ID, 'View', 2 FROM modules WHERE Name='imaging_uploader';
67

78
INSERT IGNORE INTO ConfigSettings (Name, Description, Visible, AllowMultiple, DataType, Parent, Label, OrderNumber)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
INSERT INTO permissions (code, description, moduleID, `action`, categoryID)
1+
INSERT IGNORE INTO permissions (code, description, moduleID, `action`, categoryID)
22
SELECT 'dicom_archive_nosessionid', 'DICOMs with no session ID', ID, 'View', 2 FROM modules WHERE Name='dicom_archive';
33

4-
INSERT INTO permissions (code, description, moduleID, `action`, categoryID)
4+
INSERT IGNORE INTO permissions (code, description, moduleID, `action`, categoryID)
55
SELECT 'dicom_archive_view_ownsites', 'DICOMs - Own Sites', ID, 'View', 2 FROM modules WHERE Name='dicom_archive';

modules/dataquery/php/provisioners/alluserqueries.class.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class AllUserQueries extends \LORIS\Data\Provisioners\DBRowProvisioner
3232
FROM dataquery_queries dq
3333
-- User named queries
3434
LEFT JOIN dataquery_query_names name ON
35-
(dq.QueryID=name.QueryID AND name.UserID=:userid)
35+
(dq.QueryID=name.QueryID)
3636
-- Admin pinned top queries
3737
LEFT JOIN dataquery_study_queries_rel dsq ON
3838
(dq.QueryID=dsq.QueryID AND PinType='topquery')
@@ -50,7 +50,7 @@ class AllUserQueries extends \LORIS\Data\Provisioners\DBRowProvisioner
5050
SELECT QueryID FROM dataquery_study_queries_rel
5151
WHERE PinType='topquery'
5252
)
53-
GROUP BY dq.QueryID
53+
GROUP BY dq.QueryID, name.Name, starred.StarredBy
5454
",
5555
['userid' => $user->getId()]
5656
);

modules/dicom_archive/php/module.class.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class Module extends \Module
6060
try {
6161
$this->validateConfig();
6262
} catch (\ConfigurationException $e) {
63-
error_log($e);
63+
error_log($e->getMessage());
6464
return (new \LORIS\Middleware\PageDecorationMiddleware(
6565
$request->getAttribute("user") ?? new \LORIS\AnonymousUser()
6666
))->process(

modules/document_repository/php/editcategory.class.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class EditCategory extends \NDB_Page
4040
return ($user->hasPermission('document_repository_categories')
4141
&& $user->hasAnyPermission(
4242
[
43-
'document_repository_upload',
43+
'document_repository_upload_edit',
4444
'document_repository_delete',
4545
]
4646
)

modules/imaging_uploader/ajax/getUploadSummary.php

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,90 @@
1818
* @link https://www.github.com/Jkat/Loris-Trunk/
1919
*/
2020

21-
if (!\User::singleton()->hasPermission('imaging_uploader')) {
21+
// Base access check - user must have either of these permissions
22+
// more access validation after request validation
23+
if (!$user->hasAnyPermission(
24+
[
25+
'imaging_uploader_allsites',
26+
'imaging_uploader_ownsites',
27+
]
28+
)
29+
) {
2230
http_response_code(403);
2331
return;
2432
}
33+
$config = \NDB_Factory::singleton()->config();
34+
$advancedperms = $config->getSetting('useAdvancedPermissions');
35+
$user = \NDB_Factory::singleton()->user();
36+
$centerString = implode("','", $user->getCenterIDs());
37+
$projectString = implode("','", $user->getProjectIDs());
38+
$username = $user->getUsername();
39+
2540
if (!validRequest()) {
2641
http_response_code(400);
2742
return;
2843
}
2944

3045
$uploadId = $_POST['uploadId'];
3146
$summary = $_POST['summary'] === 'true';
47+
$DB = \NDB_Factory::singleton()->database();
48+
49+
// Access Control - mimic menu filter behaviour
50+
// MySQL order of operations dictates that ANDs get computed before ORs which
51+
// means this where clause can take the follwoing forms
52+
// 1. WHERE mu.UploadedBy='$username' OR 1=1
53+
// -> returns all records
54+
// 2. WHERE mu.UploadedBy='$username' OR (1=1 AND s.CenterID IN ...)
55+
// -> returns records for user's sites
56+
// 3. WHERE mu.UploadedBy='$username' OR (1=1 AND s.ProjectID IN ...)
57+
// -> returns records for user's projects
58+
// 4. WHERE mu.UploadedBy='$username'
59+
// OR (1=1 AND s.CenterID IN ... AND s.ProjectID IN ...)
60+
// -> returns records for user's sites and projects
61+
// 5. WHERE mu.UploadedBy='$username'
62+
// OR (1=1 AND s.CenterID IN ... AND s.ProjectID IN ...)
63+
// OR mu.SessionID IS NULL
64+
// -> returns records for user's sites and projects and null session data
65+
// Other combinations are possible but order of operations still applies
66+
$accessQuery = "SELECT *
67+
FROM mri_upload mu
68+
LEFT JOIN session s ON (s.ID = mu.SessionID)
69+
";
70+
$accessWhere = " WHERE (mu.UploadedBy='$username' OR 1=1 ";
71+
if (!$user->hasPermission('imaging_uploader_allsites')) {
72+
// Create where clause for sites
73+
$accessWhere = $accessWhere . " AND s.CenterID IN ('$centerString') ";
74+
}
75+
76+
if ($advancedperms === 'true') {
77+
// If config setting is enabled, check the user's sites and projects
78+
// site/project match + user's own uploads
79+
$accessWhere = $accessWhere . " AND s.ProjectID IN ('$projectString')";
80+
}
81+
82+
if ($user->hasPermission('imaging_uploader_nosessionid')) {
83+
// clause for accessing null session data
84+
$accessWhere = $accessWhere . " OR mu.SessionID IS NULL ";
85+
}
86+
87+
// Wrap entire access logic in parentheses and add AND clause for specific upload ID
88+
$accessWhere = $accessWhere . ") AND UploadId =:uploadId";
89+
90+
$accessData = $DB->pselectRow(
91+
$accessQuery.$accessWhere,
92+
['uploadId' => $uploadId]
93+
);
94+
95+
96+
if (empty($accessData)) {
97+
http_response_code(403);
98+
return;
99+
}
100+
32101

33102
/* Fetch columns Inserting and InsertionComplete from table mri_upload
34103
* create Database object
35104
*/
36-
$DB = \NDB_Factory::singleton()->database();
37105
$query = "SELECT Inserting, InsertionComplete
38106
FROM mri_upload
39107
WHERE UploadId =:uploadId";

modules/instruments/php/visitsummary.class.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ class VisitSummary extends \NDB_Page
122122
);
123123
continue;
124124
}
125+
126+
$rslt[$key] = [
127+
'Test_name' => $row['Test_name'],
128+
'CommentID' => $row['CommentID'],
129+
'NumOfConflict' => $row['NumOfConflict'],
130+
];
125131
if ($instrument === null) {
126132
$rslt[$key]['Completion'] = 0;
127133
} else {

php/libraries/NDB_BVL_Instrument.class.inc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1040,7 +1040,8 @@ abstract class NDB_BVL_Instrument extends NDB_Page
10401040
]
10411041
);
10421042

1043-
$curr_examinerID = $this->getFieldValue("Examiner");
1043+
$allValues = $this->getInstanceData();
1044+
$curr_examinerID = $allValues['Examiner'];
10441045

10451046
list(
10461047
$CertificationEnabled,

0 commit comments

Comments
 (0)