Skip to content

Instantly share code, notes, and snippets.

@pfurio
Last active February 17, 2017 09:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pfurio/c86551dd7c669832bf6cef45d121ce7d to your computer and use it in GitHub Desktop.
Save pfurio/c86551dd7c669832bf6cef45d121ce7d to your computer and use it in GitHub Desktop.
RC3 - 1.0.0-final catalog permission migration. This will need first https://gist.github.com/pfurio/f7cd90af08e0073699f0beeeef1958ba
migrateCollection("metadata", {}, {config: 1, acl: 1}, function (bulk, doc) {
var id = doc._id;
var permissions = ["VIEW_FILE_HEADERS", "VIEW_FILE_CONTENTS", "VIEW_FILES", "WRITE_FILES", "VIEW_JOBS", "WRITE_JOBS"];
doc.acl[0].permissions = permissions;
doc.config.acl[0].permissions = permissions;
bulk.find({_id: id}).update({$set: {"acl": doc.acl, "config.acl": doc.config.acl}});
});
migrateCollection("study", {acl:{$exists:true, $ne: []}}, {acl:1}, function (bulk, doc) {
var ref = doc.reference;
var id = doc._id;
var modified = false;
for (var i in doc.acl) {
var acl = doc.acl[i];
var permissions = [];
var writeVariable = false;
var writeFiles = false;
var writeJobs = false;
var writeSamples = false;
var writeSampleAnnotations = false;
var writeIndividuals = false;
var writeIndividualAnnotations = false;
var writeCohort = false;
var writeCohortAnnotations = false;
var writeDatasets = false;
var writePanels = false;
for (var j in acl.permissions) {
var permission = acl.permissions[j];
switch(permission) {
case "CREATE_VARIABLE_SET":
case "UPDATE_VARIABLE_SET":
modified = true;
writeVariable = true;
break;
case "CREATE_FILES":
case "UPDATE_FILES":
modified = true;
writeFiles = true;
break;
case "CREATE_JOBS":
case "UPDATE_JOBS":
modified = true;
writeJobs = true;
break;
case "CREATE_SAMPLES":
case "UPDATE_SAMPLES":
modified = true;
writeSamples = true;
break;
case "CREATE_SAMPLE_ANNOTATIONS":
case "UPDATE_SAMPLE_ANNOTATIONS":
modified = true;
writeSampleAnnotations = true;
break;
case "CREATE_INDIVIDUALS":
case "UPDATE_INDIVIDUALS":
modified = true;
writeIndividuals = true;
break;
case "CREATE_INDIVIDUAL_ANNOTATIONS":
case "UPDATE_INDIVIDUAL_ANNOTATIONS":
modified = true;
writeIndividualAnnotations = true;
break;
case "CREATE_COHORTS":
case "UPDATE_COHORTS":
modified = true;
writeCohort = true;
break;
case "CREATE_COHORT_ANNOTATIONS":
case "UPDATE_COHORT_ANNOTATIONS":
modified = true;
writeCohortAnnotations = true;
break;
case "CREATE_DATASETS":
case "UPDATE_DATASETS":
modified = true;
writeDatasets = true;
break;
case "CREATE_PANELS":
case "UPDATE_PANELS":
modified = true;
writePanels = true;
break;
default:
permissions.push(permission);
break;
}
}
if (writeVariable) {
permissions.push("WRITE_VARIABLE_SET");
}
if (writeFiles) {
permissions.push("WRITE_FILES");
}
if (writeJobs) {
permissions.push("WRITE_JOBS");
}
if (writeSamples) {
permissions.push("WRITE_SAMPLES");
}
if (writeSampleAnnotations) {
permissions.push("WRITE_SAMPLE_ANNOTATIONS");
}
if (writeIndividuals) {
permissions.push("WRITE_INDIVIDUALS");
}
if (writeIndividualAnnotations) {
permissions.push("WRITE_INDIVIDUAL_ANNOTATIONS");
}
if (writeCohort) {
permissions.push("WRITE_COHORTS");
}
if (writeCohortAnnotations) {
permissions.push("WRITE_COHORT_ANNOTATIONS");
}
if (writeDatasets) {
permissions.push("WRITE_DATASETS");
}
if (writePanels) {
permissions.push("WRITE_PANELS");
}
doc.acl[i].permissions = permissions;
}
if (modified) {
print("Updating permissions from study: _id : '" + id + "'");
bulk.find({_id: id}).update({$set: {"acl": doc.acl}});
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment