adding ability to specify page permissions through page management

This commit is contained in:
hudajkhan 2013-10-10 14:24:54 -04:00
parent cf0ccdcb02
commit 51cdc922a2
6 changed files with 122 additions and 2 deletions

View file

@ -95,6 +95,22 @@ public class SimplePermission extends Permission {
public static final SimplePermission USE_MISCELLANEOUS_PAGES = new SimplePermission(
NAMESPACE + "UseMiscellaneousPages");
// ----------------------------------------------------------------------
// These instances are permissions that can be specified for a given page created/managed through page management,
// e.g. this page is viewable only by admins, this page is viewable to anyone who is logged in, etc.
// ----------------------------------------------------------------------
public static final SimplePermission PAGE_VIEWABLE_ADMIN = new SimplePermission(
NAMESPACE + "PageViewableAdmin");
public static final SimplePermission PAGE_VIEWABLE_CURATOR = new SimplePermission(
NAMESPACE + "PageViewableCurator");
public static final SimplePermission PAGE_VIEWABLE_LOGGEDIN = new SimplePermission(
NAMESPACE + "PageViewableLoggedIn");
public static final SimplePermission PAGE_VIEWABLE_EDITOR = new SimplePermission(
NAMESPACE + "PageViewableEditor");
public static final SimplePermission PAGE_VIEWABLE_PUBLIC = new SimplePermission(
NAMESPACE + "PageViewablePublic");
public static List<SimplePermission> getAllInstances() {
return new ArrayList<SimplePermission>(allInstances.values());
}

View file

@ -40,6 +40,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.ManagePagePreprocessor;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessDataGetterN3;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessDataGetterN3Utils;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.utils.dataGetter.DataGetterUtils;
import edu.cornell.mannlib.vitro.webapp.utils.menuManagement.MenuManagementDataUtils;
@ -98,7 +99,7 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
private void setUrisAndLiteralsOnForm(EditConfigurationVTwo conf,
VitroRequest vreq) {
conf.setUrisOnForm(new String[]{"page", "menuItem"}); //new resources: should this be on form for new - should be for existing
conf.setUrisOnForm(new String[]{"page", "menuItem", "action"}); //new resources: should this be on form for new - should be for existing
conf.setLiteralsOnForm(new String[]{"pageName", "prettyUrl", "menuPosition", "menuLinkText", "customTemplate", "isSelfContainedTemplate", "pageContentUnit"}); //page content unit = data getter JSON object
}
@ -118,7 +119,8 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
//body template is not required, and a given page may or may not be a menu item, but should linked to menu if menu item
conf.setN3Optional(new ArrayList<String>(Arrays.asList(prefixes + pageBodyTemplateN3,
prefixes + menuItemN3 + menuN3,
prefixes + isSelfContainedTemplateN3)));
prefixes + isSelfContainedTemplateN3,
prefixes + permissionN3)));
}
private void setN3Required(EditConfigurationVTwo conf) {
@ -155,6 +157,10 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
FieldVTwo isSelfContainedTemplateField = new FieldVTwo().setName("isSelfContainedTemplate");
conf.addField(isSelfContainedTemplateField);
//Permission for the page
FieldVTwo permissionField = new FieldVTwo().setName("action");
conf.addField(permissionField);
//The actual page content information is stored in this field, and then
//interpreted using the preprocessor
FieldVTwo pageContentUnitField = new FieldVTwo().setName("pageContentUnit");
@ -413,6 +419,7 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
private HashMap<String, String> generateSparqlForExistingUris() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("menuItem", getExistingMenuItemQuery());
map.put("action", getExistingActionQuery());
return map;
}
@ -420,6 +427,11 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
String query = getSparqlPrefix() + "SELECT ?menuItem WHERE {?menuItem display:toPage ?page .}";
return query;
}
private String getExistingActionQuery() {
String query = getSparqlPrefix() + "SELECT ?action WHERE {?page display:requiresAction ?action .}";
return query;
}
//Page level literals:
//"pageName", "prettyUrl", "menuPosition", "menuLinkText", "customTemplate"
@ -509,6 +521,8 @@ private String getExistingIsSelfContainedTemplateQuery() {
MenuManagementDataUtils.includeRequiredSystemData(vreq.getSession().getServletContext(), data);
data.put("classGroup", new ArrayList<String>());
data.put("classGroups", DataGetterUtils.getClassGroups(vreq));
data.put("availablePermissions", this.getAvailablePermissions(vreq));
data.put("availablePermissionOrderedList", this.getAvailablePermissonsOrderedURIs());
}
private void addExistingPageData(VitroRequest vreq, Map<String, Object> data) {
@ -531,6 +545,31 @@ private String getExistingIsSelfContainedTemplateQuery() {
}
}
private HashMap<String, String> getAvailablePermissions(VitroRequest vreq) {
HashMap<String, String> availablePermissions = new HashMap<String, String>();
String actionNamespace = "java:edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission#";
availablePermissions.put(actionNamespace + "PageViewableAdmin", I18n.text(vreq, "page_admin_permission_option"));
availablePermissions.put(actionNamespace + "PageViewableCurator", I18n.text(vreq,"page_curator_permission_option"));
availablePermissions.put(actionNamespace + "PageViewableEditor", I18n.text(vreq,"page_editor_permission_option"));
availablePermissions.put(actionNamespace + "PageViewableLoggedIn", I18n.text(vreq,"page_loggedin_permission_option"));
availablePermissions.put(actionNamespace + "PageViewablePublic", I18n.text(vreq,"page_public_permission_option"));
return availablePermissions;
}
//To display the permissions in a specific order, we can't rely on the hashmap whose keys are not guaranteed to return in a specific order
//This is to allow the display to work correctly
private List<String> getAvailablePermissonsOrderedURIs() {
List<String> availablePermissionsOrdered = new ArrayList<String>();
String actionNamespace = "java:edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission#";
availablePermissionsOrdered.add(actionNamespace + "PageViewableAdmin");
availablePermissionsOrdered.add(actionNamespace + "PageViewableCurator");
availablePermissionsOrdered.add(actionNamespace + "PageViewableEditor");
availablePermissionsOrdered.add(actionNamespace + "PageViewableLoggedIn");
availablePermissionsOrdered.add(actionNamespace + "PageViewablePublic");
return availablePermissionsOrdered;
}
//N3 strings
//For new or existing page
@ -563,6 +602,9 @@ private String getExistingIsSelfContainedTemplateQuery() {
final static String menuN3 = "display:DefaultMenu display:hasElement ?menuItem .";
//N3 that will assign a permission to a page
final static String permissionN3 = "?page display:requiresAction ?action .";
//These are public static methods that can be used in the preprocessor
public final static String getDataGetterN3(String dataGetterVar) {
return prefixes + "?page display:hasDataGetter " + dataGetterVar + ".";