1 package com.daffodilwoods.daffodildb.server.datadictionarysystem; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.sql99.common.*; 6 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 7 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 8 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 9 import com.daffodilwoods.database.general.*; 10 import com.daffodilwoods.database.resource.*; 11 import com.daffodilwoods.database.utility.*; 12 13 public class BrowserUserPrivilegeTable implements _PrivilegeTable { 14 int rights; 15 ArrayList column_rights; 16 QualifiedIdentifier tableName; 17 PreparedStatementGetter preparedStatementGetter; 18 _ColumnCharacteristics columnCharacterisitics; 19 booleanvalueexpression condition; 20 String authorizationIdentifier; 21 22 public BrowserUserPrivilegeTable(_DataDictionary data_dictionary, 23 PreparedStatementGetter preparedStatementGetter0, 24 QualifiedIdentifier table_name) throws DException { 25 preparedStatementGetter = preparedStatementGetter0; 26 condition = QueryGetter.getPrivilegeCondition(); 27 tableName = table_name; 28 if (table_name != null) { 29 if (table_name.catalog.equalsIgnoreCase(SystemTables.systemCatalog)) { 30 rights = SystemTables.isSystemTable(table_name.getIdentifier()) && 31 table_name.getIdentifier().equalsIgnoreCase(SystemTables.dualSystemTable.toString()) ? SELECT : 32 SystemTables.isSystemTable(table_name.getIdentifier()) ? NOACCESS : RIGHTWITHGRANTOPTION; 33 } else 34 rights = RIGHTWITHGRANTOPTION; 35 columnCharacterisitics = data_dictionary.getColumnCharacteristics(table_name, true); 36 int columnCount = columnCharacterisitics.getColumnCount(); 37 column_rights = new ArrayList(columnCount); 38 for (int i = columnCount; i-- > 0; ) 39 column_rights.add(null); 40 } 41 } 42 43 public boolean hasTablePrivileges(int parm1) throws DException { 44 if (SystemTables.isSystemTable(tableName.toString())) { 45 if (tableName.getIdentifier().equalsIgnoreCase(SystemTables.dualSystemTable.toString())) 46 if (parm1 == SELECT) 47 return true; 48 return false; 49 } else 50 return rights == RIGHTWITHGRANTOPTION; 51 } 52 53 public boolean hasColumnPrivileges(int operationType, int[] columnIndexes) throws DException { 54 if(columnIndexes == null){ 55 int columnCount = columnCharacterisitics.getColumnCount(); 56 columnIndexes = new int[columnCount-5]; 57 for (int i = 0; i < columnCount-5; i++) { 58 columnIndexes[i] = i+5; 59 } 60 } 61 for (int i = 0; i < columnIndexes.length; i++) { 62 boolean be = hasColumnRights(columnIndexes[i], operationType); 63 if (!be) 64 return false; 65 } 66 return true; 67 } 68 69 private boolean hasColumnRights(int column_index, int operationType) throws DException { 70 Object obj = column_rights.get(column_index); 71 if (obj == null) 72 obj = setColumnRights(column_index, operationType); 73 int[] col_rig = (int[]) obj; 74 return col_rig[operationType] != NOACCESS; 75 } 76 77 private synchronized int[] setColumnRights(int columnIndex, 78 int operationType) throws DException { 79 String col_Name = columnCharacterisitics.getColumnName(columnIndex); 80 int[] colrights = null; 81 if (rights == NOACCESS) 82 colrights = new int[] { 83 NOACCESS, NOACCESS, NOACCESS, NOACCESS, NOACCESS, NOACCESS, NOACCESS 84 }; 85 else { 86 if (P.indexOfIgnoreCase(SystemFields.systemFields, col_Name) == 0 || 87 P.indexOfIgnoreCase(SystemFields.systemFields, col_Name) == 1 || 88 P.indexOfIgnoreCase(SystemFields.systemFields, col_Name) == 2 || 89 P.indexOfIgnoreCase(SystemFields.systemFields, col_Name) == 3 || 90 P.indexOfIgnoreCase(SystemFields.systemFields, col_Name) == 4) { 91 if (col_Name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.rowId]) || 92 col_Name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.sessionId]) || 93 col_Name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.transactionId]) || 94 col_Name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.invalidSessionId]) || 95 col_Name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.invalidTransactionId])) { 96 colrights = new int[] { 97 NOACCESS, NOACCESS, NOACCESS, RIGHTWITHGRANTOPTION, NOACCESS, 98 RIGHTWITHGRANTOPTION, NOACCESS 99 }; 100 } else { 101 colrights = new int[] { 102 NOACCESS, NOACCESS, NOACCESS, NOACCESS, NOACCESS, NOACCESS, 103 NOACCESS 104 }; 105 } 106 } else if (tableName.getIdentifier().equalsIgnoreCase(SystemTables.dualSystemTable.toString())) { 107 colrights = new int[] { 108 NOACCESS, NOACCESS, NOACCESS, RIGHTWITHGRANTOPTION, NOACCESS, NOACCESS, 109 NOACCESS 110 }; 111 } else { 112 colrights = new int[] { 113 RIGHTWITHGRANTOPTION, RIGHTWITHGRANTOPTION, NOACCESS, 114 RIGHTWITHGRANTOPTION, NOACCESS, RIGHTWITHGRANTOPTION, NOACCESS 115 }; 116 } 117 } 118 column_rights.set(columnIndex, colrights); 119 return colrights; 120 } 121 122 public ParameterisedCondition getPrivilegeCondition() throws DException { 123 ParameterisedCondition pc = new ParameterisedCondition(); 124 pc.setBVE(condition); 125 VariableValues vv = new VariableValues(preparedStatementGetter.serverSession); 126 pc.setVariableValues(vv); 127 return pc; 128 } 129 130 public boolean hasExecutionRights(String parm1, String parm2, String parm3) throws DException { 131 return true; 132 } 133 134 public int getColumnPrivilegesType(int columnIndex, int operationType) throws DException { 135 Object obj = column_rights.get(columnIndex); 136 if (obj == null) 137 obj = setColumnRights(columnIndex, operationType); 138 int[] col_rig = (int[]) obj; 139 return col_rig[operationType]; 140 } 141 142 public boolean hasColumnPrivilegesWithGrantOption(int columnIndex, int operationType) throws DException { 143 Object obj = column_rights.get(columnIndex); 144 if (obj == null) 145 obj = setColumnRights(columnIndex, operationType); 146 int[] col_rig = (int[]) obj; 147 return col_rig[operationType] == RIGHTWITHGRANTOPTION; 148 } 149 } 150 | Popular Tags |