/* * SecurityDatasourceUser.java * * Created on June 24, 2007, 12:04 AM * * CodaServer and related original technologies are copyright 2008, 18th Street Software, LLC. * * Permission to use them is granted under the terms of the GNU GPLv2. */ package org.codalang.codaserver.security; import org.codalang.codaserver.Datasource; import java.util.Enumeration; import java.util.HashSet; import java.util.Hashtable; /** * * @author michaelarace */ public class SecurityDatasourceUser { private HashSet<String> permissions; private Hashtable tablePermissions; private Hashtable formStatusPermissions; private Hashtable procedurePermissions; /** Creates a new instance of SecurityDatasourceUser */ public SecurityDatasourceUser(HashSet permissions, Hashtable tablePermissions, Hashtable formStatusPermissions, Hashtable procedurePermissions) { this.setPermissions(permissions); this.setTablePermissions(tablePermissions); this.setFormStatusPermissions(formStatusPermissions); this.setProcedurePermissions(procedurePermissions); } public HashSet getPermissions() { return permissions; } public void setPermissions(HashSet permissions) { this.permissions = permissions; } public Hashtable getTablePermissions() { return tablePermissions; } public void setTablePermissions(Hashtable tablePermissions) { this.tablePermissions = tablePermissions; } public Hashtable getFormStatusPermissions() { return formStatusPermissions; } public void setFormStatusPermissions(Hashtable formStatusPermissions) { this.formStatusPermissions = formStatusPermissions; } public Hashtable getProcedurePermissions() { return procedurePermissions; } public void setProcedurePermissions(Hashtable procedurePermissions) { this.procedurePermissions = procedurePermissions; } public boolean hasPermission(String permissionName) { return permissions.contains(permissionName.toUpperCase()); } public boolean hasTablePermission(int permission, String tableName) { if (!tablePermissions.containsKey(tableName.toUpperCase())) { return false; } switch(permission) { case Datasource.TABLE_INSERT: if (((String)tablePermissions.get(tableName.toUpperCase())).substring(1,1).equals("1")) { return true; } break; case Datasource.TABLE_UPDATE: if (((String)tablePermissions.get(tableName.toUpperCase())).substring(2,1).equals("1")) { return true; } break; case Datasource.TABLE_DELETE: if (((String)tablePermissions.get(tableName.toUpperCase())).substring(3,1).equals("1")) { return true; } break; default: if (((String)tablePermissions.get(tableName.toUpperCase())).substring(0,1).equals("1")) { return true; } } return false; } public boolean hasFormStatusPermission(int permission, String tableName, String formStatusName, boolean adjFlag) { Enumeration en = formStatusPermissions.keys(); Hashtable adjectives = new Hashtable(), verbs = new Hashtable(); while (en.hasMoreElements()) { String key = (String)en.nextElement(); if (key.startsWith(tableName.toUpperCase())) { int firstColon = key.indexOf(":"); int secondColon = key.indexOf(":", firstColon + 1); adjectives.put(key.substring(firstColon + 1, secondColon - firstColon + 1).toUpperCase(), key); verbs.put(key.substring(secondColon + 1).toUpperCase(), key); } } if (verbs.size() == 0 || (adjFlag && !adjectives.containsKey(formStatusName) ) || (!adjFlag && !verbs.containsKey(formStatusName))) { return false; } String key = (adjFlag ? (String)adjectives.get(formStatusName) : (String)verbs.get(formStatusName)).toUpperCase(); switch(permission) { case Datasource.FORM_STATUS_CALL: if (((String)formStatusPermissions.get(key)).substring(2,1).equals("1")) { return true; } break; case Datasource.FORM_STATUS_UPDATE: if (((String)formStatusPermissions.get(key)).substring(1,1).equals("1")) { return true; } break; default: if (((String)formStatusPermissions.get(key)).substring(0,1).equals("1")) { return true; } } return false; } public boolean hasProcedurePermission(int permission, String procedureName) { if (!tablePermissions.containsKey(procedureName.toUpperCase())) { return false; } switch(permission) { default: if (((String)procedurePermissions.get(procedureName.toUpperCase())).substring(0,1).equals("1")) { return true; } } return false; } }