📄 mrole.java
字号:
log.warning ("Role denied");
return false;
}
if (!isTableAccess(AD_Table_ID, true)) // No R/O Access to Table
return false;
//
boolean canReport = true;
for (int i = 0; i < m_tableAccess.length; i++)
{
if (!MTableAccess.ACCESSTYPERULE_Reporting.equals(m_tableAccess[i].getAccessTypeRule()))
continue;
if (m_tableAccess[i].isExclude()) // Exclude
{
if (m_tableAccess[i].getAD_Table_ID() == AD_Table_ID)
{
canReport = m_tableAccess[i].isCanReport();
log.fine("Exclude " + AD_Table_ID + " - " + canReport);
return canReport;
}
}
else // Include
{
canReport = false;
if (m_tableAccess[i].getAD_Table_ID() == AD_Table_ID)
{
canReport = m_tableAccess[i].isCanReport();
log.fine("Include " + AD_Table_ID + " - " + canReport);
return canReport;
}
}
} // for all Table Access
log.fine(AD_Table_ID + " - " + canReport);
return canReport;
} // isCanReport
/**
* Can Export Table
* @param AD_Table_ID
* @return true if access
*/
public boolean isCanExport (int AD_Table_ID)
{
if (!isCanExport()) // Role Level block
{
log.warning ("Role denied");
return false;
}
if (!isTableAccess(AD_Table_ID, true)) // No R/O Access to Table
return false;
if (!isCanReport (AD_Table_ID)) // We cannot Export if we cannot report
return false;
//
boolean canExport = true;
for (int i = 0; i < m_tableAccess.length; i++)
{
if (!MTableAccess.ACCESSTYPERULE_Exporting.equals(m_tableAccess[i].getAccessTypeRule()))
continue;
if (m_tableAccess[i].isExclude()) // Exclude
{
canExport = m_tableAccess[i].isCanExport();
log.fine("Exclude " + AD_Table_ID + " - " + canExport);
return canExport;
}
else // Include
{
canExport = false;
canExport = m_tableAccess[i].isCanExport();
log.fine("Include " + AD_Table_ID + " - " + canExport);
return canExport;
}
} // for all Table Access
log.fine(AD_Table_ID + " - " + canExport);
return canExport;
} // isCanExport
/**
* Access to Table
* @param AD_Table_ID table
* @param ro check read only access otherwise read write access level
* @return has RO/RW access to table
*/
public boolean isTableAccess (int AD_Table_ID, boolean ro)
{
if (!isTableAccessLevel (AD_Table_ID, ro)) // Role Based Access
return false;
loadTableAccess(false);
//
boolean hasAccess = true; // assuming exclusive rule
for (int i = 0; i < m_tableAccess.length; i++)
{
if (!MTableAccess.ACCESSTYPERULE_Accessing.equals(m_tableAccess[i].getAccessTypeRule()))
continue;
if (m_tableAccess[i].isExclude()) // Exclude
// If you Exclude Access to a table and select Read Only,
// you can only read data (otherwise no access).
{
if (m_tableAccess[i].getAD_Table_ID() == AD_Table_ID)
{
if (ro)
hasAccess = m_tableAccess[i].isReadOnly();
else
hasAccess = false;
log.fine("Exclude AD_Table_ID=" + AD_Table_ID
+ " (ro=" + ro + ",TableAccessRO=" + m_tableAccess[i].isReadOnly() + ") = " + hasAccess);
return hasAccess;
}
}
else // Include
// If you Include Access to a table and select Read Only,
// you can only read data (otherwise full access).
{
hasAccess = false;
if (m_tableAccess[i].getAD_Table_ID() == AD_Table_ID)
{
if (!ro) // rw only if not r/o
hasAccess = !m_tableAccess[i].isReadOnly();
else
hasAccess = true;
log.fine("Include AD_Table_ID=" + AD_Table_ID
+ " (ro=" + ro + ",TableAccessRO=" + m_tableAccess[i].isReadOnly() + ") = " + hasAccess);
return hasAccess;
}
}
} // for all Table Access
if (!hasAccess)
log.fine("AD_Table_ID=" + AD_Table_ID
+ "(ro=" + ro + ") = " + hasAccess);
return hasAccess;
} // isTableAccess
/**
* Access to Table based on Role User Level Table Access Level
* @param AD_Table_ID table
* @param ro check read only access otherwise read write access level
* @return has RO/RW access to table
*/
public boolean isTableAccessLevel (int AD_Table_ID, boolean ro)
{
if (ro) // role can always read
return true;
//
loadTableInfo(false);
// AccessLevel
// 1 = Org - 2 = Client - 4 = System
// 3 = Org+Client - 6 = Client+System - 7 = All
String accessLevel = (String)m_tableAccessLevel.get(new Integer(AD_Table_ID));
if (accessLevel == null)
{
log.fine("NO - No AccessLevel - AD_Table_ID=" + AD_Table_ID);
return false;
}
// Access to all User Levels
if (accessLevel.equals(X_AD_Table.ACCESSLEVEL_All))
return true;
// User Level = SCO
String userLevel = getUserLevel();
//
if (userLevel.charAt(0) == 'S'
&& (accessLevel.equals(X_AD_Table.ACCESSLEVEL_SystemOnly)
|| accessLevel.equals(X_AD_Table.ACCESSLEVEL_SystemPlusClient)))
return true;
if (userLevel.charAt(1) == 'C'
&& (accessLevel.equals(X_AD_Table.ACCESSLEVEL_ClientOnly)
|| accessLevel.equals(X_AD_Table.ACCESSLEVEL_SystemPlusClient)))
return true;
if (userLevel.charAt(2) == 'O'
&& (accessLevel.equals(X_AD_Table.ACCESSLEVEL_Organization)
|| accessLevel.equals(X_AD_Table.ACCESSLEVEL_ClientPlusOrganization)))
return true;
log.fine("NO - AD_Table_ID=" + AD_Table_ID
+ ", UserLebel=" + userLevel + ", AccessLevel=" + accessLevel);
return false;
} // isTableAccessLevel
/**
* Access to Column
* @param AD_Table_ID table
* @param AD_Column_ID column
* @param ro read only
* @return true if access
*/
public boolean isColumnAccess (int AD_Table_ID, int AD_Column_ID, boolean ro)
{
if (!isTableAccess(AD_Table_ID, ro)) // No Access to Table
return false;
loadColumnAccess(false);
boolean retValue = true; // assuming exclusive
for (int i = 0; i < m_columnAccess.length; i++)
{
if (m_columnAccess[i].isExclude()) // Exclude
// If you Exclude Access to a column and select Read Only,
// you can only read data (otherwise no access).
{
if (m_columnAccess[i].getAD_Table_ID() == AD_Table_ID
&& m_columnAccess[i].getAD_Column_ID() == AD_Column_ID)
{
if (ro) // just R/O Access requested
retValue = m_columnAccess[i].isReadOnly();
else
retValue = false;
if (!retValue)
log.fine("Exclude AD_Table_ID=" + AD_Table_ID + ", AD_Column_ID=" + AD_Column_ID
+ " (ro=" + ro + ",ColumnAccessRO=" + m_columnAccess[i].isReadOnly() + ") = " + retValue);
return retValue;
}
}
else // Include
// If you Include Access to a column and select Read Only,
// you can only read data (otherwise full access).
{
if (m_columnAccess[i].getAD_Table_ID() == AD_Table_ID)
{
retValue = false;
if (m_columnAccess[i].getAD_Column_ID() == AD_Column_ID)
{
if (!ro) // rw only if not r/o
retValue = !m_columnAccess[i].isReadOnly();
else
retValue = true;
if (!retValue)
log.fine("Include AD_Table_ID=" + AD_Table_ID + ", AD_Column_ID=" + AD_Column_ID
+ " (ro=" + ro + ",ColumnAccessRO=" + m_columnAccess[i].isReadOnly() + ") = " + retValue);
return retValue;
}
} // same table
} // include
} // for all Table Access
if (!retValue)
log.fine("AD_Table_ID=" + AD_Table_ID + ", AD_Column_ID=" + AD_Column_ID
+ " (ro=" + ro + ") = " + retValue);
return retValue;
} // isColumnAccess
/**
* Access to Record (no check of table)
* @param AD_Table_ID table
* @param Record_ID record
* @param ro read only
* @return boolean
*/
public boolean isRecordAccess (int AD_Table_ID, int Record_ID, boolean ro)
{
// if (!isTableAccess(AD_Table_ID, ro)) // No Access to Table
// return false;
loadRecordAccess(false);
boolean negativeList = true;
for (int i = 0; i < m_recordAccess.length; i++)
{
MRecordAccess ra = m_recordAccess[i];
if (ra.getAD_Table_ID() != AD_Table_ID)
continue;
if (ra.isExclude()) // Exclude
// If you Exclude Access to a column and select Read Only,
// you can only read data (otherwise no access).
{
if (ra.getRecord_ID() == Record_ID)
{
if (ro)
return ra.isReadOnly();
else
return false;
}
}
else // Include
// If you Include Access to a column and select Read Only,
// you can only read data (otherwise full access).
{
negativeList = false; // has to be defined
if (ra.getRecord_ID() == Record_ID)
{
if (!ro)
return !ra.isReadOnly();
else // ro
return true;
}
}
} // for all Table Access
return negativeList;
} // isRecordAccess
/**
* Get Window Access
* @param AD_Window_ID window
* @return null in no access, TRUE if r/w and FALSE if r/o
*/
public Boolean getWindowAccess (int AD_Window_ID)
{
if (m_windowAccess == null)
{
m_windowAccess = new HashMap<Integer,Boolean>(100);
String sql = "SELECT AD_Window_ID, IsReadWrite FROM AD_Window_Access WHERE AD_Role_ID=? AND IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
m_windowAccess.put(new Integer(rs.getInt(1)), new Boolean("Y".equals(rs.getString(2))));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
log.fine("#" + m_windowAccess.size());
} // reload
Boolean retValue = (Boolean)m_windowAccess.get(new Integer(AD_Window_ID));
// log.fine("getWindowAccess - AD_Window_ID=" + AD_Window_ID + " - " + retValue);
return retValue;
} // getWindowAccess
/**
* Get Process Access
* @param AD_Process_ID process
* @return null in no access, TRUE if r/w and FALSE if r/o
*/
public Boolean getProcessAccess (int AD_Process_ID)
{
if (m_processAccess == null)
{
m_processAccess = new HashMap<Integer,Boolean>(50);
String sql = "SELECT AD_Process_ID, IsReadWrite FROM AD_Process_Access WHERE AD_Role_ID=? AND IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
m_processAccess.put(new Integer(rs.getInt(1)), new Boolean("Y".equals(rs.getString(2))));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
} // reload
return (Boolean)m_processAccess.get(new Integer(AD_Process_ID));
} // getProcessAccess
/**
* Get Task Access
* @param AD_Task_ID task
* @return null in no access, TRUE if r/w and FALSE if r/o
*/
public Boolean getTaskAccess (int AD_Task_ID)
{
if (m_taskAccess == null)
{
m_taskAccess = new HashMap<Integer,Boolean>(10);
String sql = "SELECT AD_Task_ID, IsReadWrite FROM AD_Task_Access "
+ "WHERE AD_Role_ID=? AND IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
m_taskAccess.put(new Integer(rs.getInt(1)), new Boolean("Y".equals(rs.getString(2))));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
} // reload
return (Boolean)m_taskAccess.get(new Integer(AD_Task_ID));
} // getTaskAccess
/**
* Get Form Access
* @param AD_Form_ID form
* @return null in no access, TRUE if r/w and FALSE if r/o
*/
public Boolean getFormAccess (int AD_Form_ID)
{
if (m_formAccess == null)
{
m_formAccess = new HashMap<Integer,Boolean>(20);
String sql = "SELECT AD_Form_ID, IsReadWrite FROM AD_Form_Access "
+ "WHERE AD_Role_ID=? AND IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
m_formAccess.put(new Integer(rs.getInt(1)), new Boolean("Y".equals(rs.getString(2))));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
} // reload
return (Boolean)m_formAccess.get(new Integer(AD_Form_ID));
} // getTaskAccess
/**
* Get Workflow Access
* @param AD_Workflow_ID workflow
* @return null in no access, TRUE if r/w and FALSE if r/o
*/
public Boolean getWorkflowAccess (int AD_Workflow_ID)
{
if (m_workflowAccess == null)
{
m_workflowAccess = new HashMap<Integer,Boolean>(20);
String sql = "SELECT AD_Workflow_ID, IsReadWrite FROM AD_Workflow_Access "
+ "WHERE AD_Role_ID=? AND IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
m_workflowAccess.put(new Integer(rs.getInt(1)), new Boolean("Y".equals(rs.getString(2))));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
} // reload
return (Boolean)m_workflowAccess.get(new Integer(AD_Workflow_ID));
} // getTaskAccess
/*************************************************************************
* Appends where clause to SQL statement for Table
*
* @param SQL existing SQL statement
* @param TableNameIn Table Name or list of table names AAA, BBB or AAA a, BBB b
* @param fullyQualified fullyQualified names
* @param rw if false, includes System Data
* @return updated SQL statement
*/
public String addAccessSQL (String SQL, String TableNameIn,
boolean fullyQualified, boolean rw)
{
StringBuffer retSQL = new StringBuffer();
// Cut off last ORDER BY clause
String orderBy = "";
int posOrder = SQL.lastIndexOf(" ORDER BY ");
if (posOrder != -1)
{
orderBy = SQL.substring(posOrder);
retSQL.append(SQL.substring(0, posOrder));
}
else
retSQL.append(SQL);
// Parse SQL
AccessSqlParser asp = new AccessSqlParser(retSQL.toString());
AccessSqlParser.TableInfo[] ti = asp.getTableInfo(asp.getMainSqlIndex());
// Do we have to add WHERE or AND
if (asp.getMainSql().indexOf(" WHERE ") == -1)
retSQL.append(" WHERE ");
else
retSQL.append(" AND ");
// Use First Table
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -