Skip to content

Commit 22f3249

Browse files
committed
Custom permission query for filedownloaders
1 parent d03a3c7 commit 22f3249

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

src/main/java/edu/harvard/iq/dataverse/RoleAssigneeServiceBean.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,19 @@ public List<RoleAssignee> filterRoleAssignees(String query, DvObject dvObject, L
406406

407407
return roleAssigneeList;
408408
}
409+
410+
public List<String> findFileDownloaders(Long fileId) {
411+
String sql = "SELECT DISTINCT assigneeidentifier FROM roleassignment ra, dataverserole dr, datafile df " +
412+
"WHERE ra.role_id = dr.id " +
413+
"AND get_bit(dr.permissionbits::bit(64), 59) = '1' " +
414+
"AND ra.definitionpoint_id = df.id " +
415+
"AND df.restricted = 't' " +
416+
"AND df.id = ? " +
417+
"GROUP BY assigneeidentifier";
418+
419+
return em.createNativeQuery(sql).setParameter(1, fileId).getResultList();
420+
421+
}
409422

410423
private void msg(String s) {
411424
//System.out.println(s);

src/main/java/edu/harvard/iq/dataverse/search/SearchPermissionsServiceBean.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,21 @@ public List<String> findDvObjectPerms(DvObject dvObject) {
120120
}
121121
return permStrings;
122122
}
123+
124+
public List<String> findRestrictedDatafilePerms(long fileId) {
125+
List<String> permStrings = new ArrayList<>();
126+
127+
List<String> assigneeIdStrings = roleAssigneeService.findFileDownloaders(fileId);
128+
for (String id : assigneeIdStrings) {
129+
// Don't need to cache RoleAssignees since each is unique
130+
RoleAssignee userOrGroup = roleAssigneeService.getRoleAssignee(id);
131+
String indexableUserOrGroupPermissionString = getIndexableStringForUserOrGroup(userOrGroup);
132+
if (indexableUserOrGroupPermissionString != null) {
133+
permStrings.add(indexableUserOrGroupPermissionString);
134+
}
135+
}
136+
return permStrings;
137+
}
123138

124139
@Deprecated
125140
private void resetRoleAssigneeCache() {

src/main/java/edu/harvard/iq/dataverse/search/SolrIndexServiceBean.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ private List<DvObjectSolrDoc> constructDatasetSolrDocs(Dataset dataset) {
154154
// private List<DvObjectSolrDoc> constructDatafileSolrDocs(DataFile dataFile) {
155155
private List<DvObjectSolrDoc> constructDatafileSolrDocs(DataFile dataFile, Map<Long, List<String>> permStringByDatasetVersion, Map<DatasetVersion.VersionState, Boolean> desiredCards, Set<DatasetVersion> datasetVersions) {
156156
List<DvObjectSolrDoc> datafileSolrDocs = new ArrayList<>();
157+
List<String> ftperms = new ArrayList<>();
158+
if (dataFile.isRestricted()) {
159+
ftperms = searchPermissionsService.findRestrictedDatafilePerms(dataFile.getId());
160+
}
161+
157162
for (DatasetVersion datasetVersionFileIsAttachedTo : datasetVersions) {
158163
boolean cardShouldExist = desiredCards.get(datasetVersionFileIsAttachedTo.getVersionState());
159164
/*
@@ -169,7 +174,7 @@ private List<DvObjectSolrDoc> constructDatafileSolrDocs(DataFile dataFile, Map<L
169174
String solrIdEnd = getDatasetOrDataFileSolrEnding(datasetVersionFileIsAttachedTo.getVersionState());
170175
String solrId = solrIdStart + solrIdEnd;
171176
List<String> perms = new ArrayList<>();
172-
List<String> ftperms = new ArrayList<>();
177+
173178
if (unpublishedDataRelatedToMeModeEnabled) {
174179
List<String> cachedPerms = null;
175180
if (permStringByDatasetVersion != null) {
@@ -190,10 +195,6 @@ private List<DvObjectSolrDoc> constructDatafileSolrDocs(DataFile dataFile, Map<L
190195
// This should never be executed per the deprecation notice on the boolean.
191196
perms = searchPermissionsService.findDatasetVersionPerms(datasetVersionFileIsAttachedTo);
192197
}
193-
if (dataFile.isRestricted()) {
194-
195-
ftperms = searchPermissionsService.findDataFilePermsforDatasetVersion(dataFile, datasetVersionFileIsAttachedTo);
196-
}
197198
DvObjectSolrDoc dataFileSolrDoc = new DvObjectSolrDoc(dataFile.getId().toString(), solrId, datasetVersionFileIsAttachedTo.getId(), dataFile.getDisplayName(), perms, ftperms);
198199
datafileSolrDocs.add(dataFileSolrDoc);
199200
}
@@ -226,7 +227,7 @@ private List<DvObjectSolrDoc> constructDatafileSolrDocsFromDataset(Dataset datas
226227
String solrId = solrIdStart + solrIdEnd;
227228
List<String> ftperms = new ArrayList<>();
228229
if (fileMetadata.getDataFile().isRestricted()) {
229-
ftperms = searchPermissionsService.findDataFilePermsforDatasetVersion(fileMetadata.getDataFile(), datasetVersionFileIsAttachedTo);
230+
ftperms = searchPermissionsService.findRestrictedDatafilePerms(fileMetadata.getDataFile().getId());
230231
}
231232
DvObjectSolrDoc dataFileSolrDoc = new DvObjectSolrDoc(fileId.toString(), solrId, datasetVersionFileIsAttachedTo.getId(), fileMetadata.getLabel(), perms, ftperms);
232233
logger.finest("adding fileid " + fileId);

0 commit comments

Comments
 (0)