Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package edu.unc.lib.boxc.migration.cdm.model;

import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC;
import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC;

import java.util.ArrayList;
import java.util.List;

import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC;
import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC;
import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.ON_CAMPUS_PRINC;

/**
* Permission mapping information for a project
* @author krwong
Expand All @@ -15,7 +16,7 @@ public class PermissionsInfo {
public static final String ID_FIELD = "id";
public static final String OBJECT_TYPE = "object_type";
public static final String[] CSV_HEADERS = new String[] {
ID_FIELD, OBJECT_TYPE, PUBLIC_PRINC, AUTHENTICATED_PRINC };
ID_FIELD, OBJECT_TYPE, PUBLIC_PRINC, AUTHENTICATED_PRINC, ON_CAMPUS_PRINC };

private List<PermissionMapping> mappings;

Expand Down Expand Up @@ -54,14 +55,16 @@ public static class PermissionMapping {
private String id;
private String everyone;
private String authenticated;
private String onCampus;

public PermissionMapping() {
}

public PermissionMapping(String id, String everyone, String authenticated) {
public PermissionMapping(String id, String everyone, String authenticated, String onCampus) {
this.id = id;
this.everyone = everyone;
this.authenticated = authenticated;
this.onCampus = onCampus;
}

public String getId() {
Expand All @@ -87,5 +90,13 @@ public String getAuthenticated() {
public void setAuthenticated(String authenticated) {
this.authenticated = authenticated;
}

public String getOnCampus() {
return onCampus;
}

public void setOnCampus(String onCampus) {
this.onCampus = onCampus;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,17 @@ public class PermissionMappingOptions {
description = "The patron access role assigned to the “authenticated” group (anyone that is logged in).")
private UserRole authenticated;

@Option(names = {"-oc", "--on-campus"},
description = "The patron access role assigned to the “on_campus” group.")
private UserRole onCampus;

@Option(names = {"-f", "--force"},
description = "Overwrite permission mapping if one already exists")
private boolean force;

@Option(names = {"-so", "--staff-only"},
description = "Staff only permissions, 'everyone' field and 'authenticated' field set to 'none'")
description = "Staff only permissions, 'everyone' field, 'authenticated' field, and " +
"'on_campus' field set to 'none'")
private boolean staffOnly;

public boolean isWithDefault() {
Expand Down Expand Up @@ -102,6 +107,14 @@ public void setAuthenticated(UserRole authenticated) {
this.authenticated = authenticated;
}

public UserRole getOnCampus() {
return onCampus;
}

public void setOnCampus(UserRole onCampus) {
this.onCampus = onCampus;
}

public boolean isForce() {
return force;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,18 @@ public void generatePermissions(PermissionMappingOptions options) throws Excepti

String everyoneField;
String authenticatedField;
String onCampusField = "";

// Permissions
if (options.isStaffOnly() || options.getEveryone() != null || options.getAuthenticated() != null) {
everyoneField = getAssignedRoleValue(options.isStaffOnly(), options.getEveryone());
authenticatedField = getAssignedRoleValue(options.isStaffOnly(), options.getAuthenticated());
if (options.getOnCampus() != null) {
onCampusField = getAssignedRoleValue(options.isStaffOnly(), options.getOnCampus());

}
} else {
// if no permissions/roles are specified, default to canViewOriginals
// if no permissions/roles are specified, default to canViewOriginals for everyone and authenticated
everyoneField = UserRole.canViewOriginals.getPredicate();
authenticatedField = UserRole.canViewOriginals.getPredicate();
}
Expand All @@ -89,15 +94,17 @@ public void generatePermissions(PermissionMappingOptions options) throws Excepti
csvPrinter.printRecord(PermissionsInfo.DEFAULT_ID,
"",
everyoneField,
authenticatedField);
authenticatedField,
onCampusField);
}

List<Map.Entry<String, String>> mappedIdsAndObjectType = queryForMappedIds(options);
for (Map.Entry<String, String> entry : mappedIdsAndObjectType) {
csvPrinter.printRecord(entry.getKey(),
entry.getValue(),
everyoneField,
authenticatedField);
authenticatedField,
onCampusField);
}
}

Expand Down Expand Up @@ -126,7 +133,7 @@ public void setPermissions(PermissionMappingOptions options) throws Exception {
CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(PermissionsInfo.CSV_HEADERS));
) {
for (List<String> record : records) {
csvPrinter.printRecord(record.get(0), record.get(1), record.get(2), record.get(3));
csvPrinter.printRecord(record.get(0), record.get(1), record.get(2), record.get(3), record.get(4));
}
}
}
Expand All @@ -152,6 +159,7 @@ public static PermissionsInfo loadMappings(MigrationProject project) throws IOEx
mapping.setId(csvRecord.get(0));
mapping.setEveryone(csvRecord.get(2));
mapping.setAuthenticated(csvRecord.get(3));
mapping.setOnCampus(csvRecord.get(4));
mappings.add(mapping);
}
return info;
Expand Down Expand Up @@ -347,6 +355,7 @@ private List<List<String>> updateCsvRecords(PermissionMappingOptions options) th
Set<String> addedAndUpdatedIds = new HashSet<>();
String everyoneField = getAssignedRoleValue(options.isStaffOnly(), options.getEveryone());
String authenticatedField = getAssignedRoleValue(options.isStaffOnly(), options.getAuthenticated());
String onCampusField = getAssignedRoleValue(options.isStaffOnly(), options.getOnCampus());

// addedAndUpdatedIds: list of all ids that need to be added and updated
if (options.getCdmId() != null) {
Expand All @@ -370,10 +379,12 @@ private List<List<String>> updateCsvRecords(PermissionMappingOptions options) th
// update existing entries and add unchanged entries to updatedRecords, then remove updated ids from updateIds
for (CSVRecord record : previousRecords) {
if (addedAndUpdatedIds.contains(record.get(0))) {
updatedRecords.add(Arrays.asList(record.get(0), record.get(1), everyoneField, authenticatedField));
updatedRecords.add(Arrays.asList(record.get(0), record.get(1), everyoneField, authenticatedField,
onCampusField));
addedAndUpdatedIds.remove(record.get(0));
} else {
updatedRecords.add(Arrays.asList(record.get(0), record.get(1), record.get(2), record.get(3)));
updatedRecords.add(Arrays.asList(record.get(0), record.get(1), record.get(2), record.get(3),
record.get(4)));
addedAndUpdatedIds.remove(record.get(0));
}
}
Expand All @@ -382,7 +393,7 @@ private List<List<String>> updateCsvRecords(PermissionMappingOptions options) th
for (Map.Entry<String, String> workAndFileRecord : workAndFileRecords) {
if (addedAndUpdatedIds.contains(workAndFileRecord.getKey())) {
updatedRecords.add(Arrays.asList(workAndFileRecord.getKey(), workAndFileRecord.getValue(),
everyoneField, authenticatedField));
everyoneField, authenticatedField, onCampusField));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.util.List;

import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC;
import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.ON_CAMPUS_PRINC;
import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC;
import static edu.unc.lib.boxc.migration.cdm.util.CLIConstants.outputLogger;
import static edu.unc.lib.boxc.model.api.DatastreamType.ORIGINAL_FILE;
Expand Down Expand Up @@ -259,6 +260,11 @@ protected void addPermission(String cdmId, Resource resource) {
Property authenticatedValue = UserRole.valueOf(permissionMapping.getAuthenticated()).getProperty();
resource.addLiteral(everyoneValue, PUBLIC_PRINC);
resource.addLiteral(authenticatedValue, AUTHENTICATED_PRINC);
if (!permissionMapping.getOnCampus().isBlank()) {
Property onCampusValue = UserRole.valueOf(permissionMapping.getOnCampus()).getProperty();
resource.addLiteral(onCampusValue, ON_CAMPUS_PRINC);

}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,15 @@ public List<String> validateMappings() {
) {
int i = 2;
for (CSVRecord csvRecord : csvParser) {
if (csvRecord.size() != 4) {
errors.add("Invalid entry at line " + i + ", must be 4 columns but were " + csvRecord.size());
if (csvRecord.size() != 5) {
errors.add("Invalid entry at line " + i + ", must be 5 columns but were " + csvRecord.size());
i++;
continue;
}
String id = csvRecord.get(0);
String everyone = csvRecord.get(2);
String authenticated = csvRecord.get(3);
String onCampus = csvRecord.get(4);

// default values
if (PermissionsInfo.DEFAULT_ID.equals(id)) {
Expand Down Expand Up @@ -87,6 +88,15 @@ public List<String> validateMappings() {
errors.add("No 'authenticated' permission mapped at line " + i);
}

// on_campus
if (!StringUtils.isBlank(onCampus)) {
List<String> patronRoles = getPatronRoles();
if (!patronRoles.contains(onCampus)) {
errors.add("Invalid 'on_campus' permission at line " + i + ", " + onCampus +
" is not a valid patron permission");
}
}

i++;
}
if (i == 2) {
Expand Down
Loading
Loading