📄 mrole.java
字号:
/**************************************************************************
* Load Access Info
* @param reload re-load from disk
*/
public void loadAccess (boolean reload)
{
loadOrgAccess(reload);
loadTableAccess(reload);
loadTableInfo(reload);
loadColumnAccess(reload);
loadRecordAccess(reload);
if (reload)
{
m_windowAccess = null;
m_processAccess = null;
m_taskAccess = null;
m_workflowAccess = null;
m_formAccess = null;
}
} // loadAccess
/**
* Load Org Access
* @param reload reload
*/
private void loadOrgAccess (boolean reload)
{
if (!(reload || m_orgAccess == null))
return;
//
ArrayList<OrgAccess> list = new ArrayList<OrgAccess>();
if (isUseUserOrgAccess())
loadOrgAccessUser(list);
else
loadOrgAccessRole(list);
m_orgAccess = new OrgAccess[list.size()];
list.toArray(m_orgAccess);
log.fine("#" + m_orgAccess.length + (reload ? " - reload" : ""));
if (Ini.isClient())
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < m_orgAccess.length; i++)
{
if (i > 0)
sb.append(",");
sb.append(m_orgAccess[i].AD_Org_ID);
}
Env.setContext(Env.getCtx(), "#User_Org", sb.toString());
}
} // loadOrgAccess
/**
* Load Org Access User
* @param list list
*/
private void loadOrgAccessUser(ArrayList<OrgAccess> list)
{
PreparedStatement pstmt = null;
String sql = "SELECT * FROM AD_User_OrgAccess "
+ "WHERE AD_User_ID=? AND IsActive='Y'";
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_User_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
MUserOrgAccess oa = new MUserOrgAccess(getCtx(), rs, get_TrxName());
loadOrgAccessAdd (list, new OrgAccess(oa.getAD_Client_ID(), oa.getAD_Org_ID(), oa.isReadOnly()));
}
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;
}
} // loadOrgAccessRole
/**
* Load Org Access Role
* @param list list
*/
private void loadOrgAccessRole(ArrayList<OrgAccess> list)
{
PreparedStatement pstmt = null;
String sql = "SELECT * FROM AD_Role_OrgAccess "
+ "WHERE AD_Role_ID=? AND IsActive='Y'";
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
MRoleOrgAccess oa = new MRoleOrgAccess(getCtx(), rs, get_TrxName());
loadOrgAccessAdd (list, new OrgAccess(oa.getAD_Client_ID(), oa.getAD_Org_ID(), oa.isReadOnly()));
}
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;
}
} // loadOrgAccessRole
/**
* Load Org Access Add Tree to List
* @param list list
* @param oa org access
* @see org.compiere.util.Login
*/
private void loadOrgAccessAdd (ArrayList<OrgAccess> list, OrgAccess oa)
{
if (list.contains(oa))
return;
list.add(oa);
// Do we look for trees?
if (getAD_Tree_Org_ID() == 0)
return;
MOrg org = MOrg.get(getCtx(), oa.AD_Org_ID);
if (!org.isSummary())
return;
// Summary Org - Get Dependents
MTree_Base tree = MTree_Base.get(getCtx(), getAD_Tree_Org_ID(), get_TrxName());
String sql = "SELECT AD_Client_ID, AD_Org_ID FROM AD_Org "
+ "WHERE IsActive='Y' AND AD_Org_ID IN (SELECT Node_ID FROM "
+ tree.getNodeTableName()
+ " WHERE AD_Tree_ID=? AND Parent_ID=? AND IsActive='Y')";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, tree.getAD_Tree_ID());
pstmt.setInt(2, org.getAD_Org_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
int AD_Client_ID = rs.getInt(1);
int AD_Org_ID = rs.getInt(2);
loadOrgAccessAdd (list, new OrgAccess(AD_Client_ID, AD_Org_ID, oa.readOnly));
}
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;
}
} // loadOrgAccessAdd
/**
* Load Table Access
* @param reload reload
*/
private void loadTableAccess(boolean reload)
{
if (m_tableAccess != null && !reload)
return;
ArrayList<MTableAccess> list = new ArrayList<MTableAccess>();
PreparedStatement pstmt = null;
String sql = "SELECT * FROM AD_Table_Access "
+ "WHERE AD_Role_ID=? AND IsActive='Y'";
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new MTableAccess(getCtx(), rs, get_TrxName()));
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;
}
m_tableAccess = new MTableAccess[list.size()];
list.toArray(m_tableAccess);
log.fine("#" + m_tableAccess.length);
} // loadTableAccess
/**
* Load Table Access and Name
* @param reload reload
*/
private void loadTableInfo (boolean reload)
{
if (m_tableAccessLevel != null && m_tableName != null && !reload)
return;
m_tableAccessLevel = new HashMap<Integer,String>(300);
m_tableName = new HashMap<String,Integer>(300);
PreparedStatement pstmt = null;
String sql = "SELECT AD_Table_ID, AccessLevel, TableName "
+ "FROM AD_Table WHERE IsActive='Y'";
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
Integer ii = new Integer(rs.getInt(1));
m_tableAccessLevel.put(ii, rs.getString(2));
m_tableName.put(rs.getString(3), ii);
}
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_tableAccessLevel.size());
} // loadTableAccessLevel
/**
* Load Column Access
* @param reload reload
*/
private void loadColumnAccess(boolean reload)
{
if (m_columnAccess != null && !reload)
return;
ArrayList<MColumnAccess> list = new ArrayList<MColumnAccess>();
PreparedStatement pstmt = null;
String sql = "SELECT * FROM AD_Column_Access "
+ "WHERE AD_Role_ID=? AND IsActive='Y'";
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new MColumnAccess(getCtx(), rs, get_TrxName()));
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;
}
m_columnAccess = new MColumnAccess[list.size()];
list.toArray(m_columnAccess);
log.fine("#" + m_columnAccess.length);
} // loadColumnAccess
/**
* Load Record Access
* @param reload reload
*/
private void loadRecordAccess(boolean reload)
{
if (!(reload || m_recordAccess == null || m_recordDependentAccess == null))
return;
ArrayList<MRecordAccess> list = new ArrayList<MRecordAccess>();
ArrayList<MRecordAccess> dependent = new ArrayList<MRecordAccess>();
PreparedStatement pstmt = null;
String sql = "SELECT * FROM AD_Record_Access "
+ "WHERE AD_Role_ID=? AND IsActive='Y' ORDER BY AD_Table_ID";
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Role_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
MRecordAccess ra = new MRecordAccess(getCtx(), rs, get_TrxName());
list.add(ra);
if (ra.isDependentEntities())
dependent.add(ra);
}
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;
}
m_recordAccess = new MRecordAccess[list.size()];
list.toArray(m_recordAccess);
m_recordDependentAccess = new MRecordAccess[dependent.size()];
dependent.toArray(m_recordDependentAccess);
log.fine("#" + m_recordAccess.length + " - Dependent #" + m_recordDependentAccess.length);
} // loadRecordAccess
/**************************************************************************
* Get Client Where Clause Value
* @param rw read write
* @return "AD_Client_ID=0" or "AD_Client_ID IN(0,1)"
*/
public String getClientWhere (boolean rw)
{
// All Orgs - use Client of Role
if (isAccessAllOrgs())
{
if (rw || getAD_Client_ID() == 0)
return "AD_Client_ID=" + getAD_Client_ID();
return "AD_Client_ID IN (0," + getAD_Client_ID() + ")";
}
// Get Client from Org List
loadOrgAccess (false);
// Unique Strings
HashSet<String> set = new HashSet<String>();
if (!rw)
set.add("0");
// Positive List
for (int i = 0; i < m_orgAccess.length; i++)
set.add(String.valueOf(m_orgAccess[i].AD_Client_ID));
//
StringBuffer sb = new StringBuffer();
Iterator it = set.iterator();
boolean oneOnly = true;
while (it.hasNext())
{
if (sb.length() > 0)
{
sb.append(",");
oneOnly = false;
}
sb.append(it.next());
}
if (oneOnly)
{
if (sb.length() > 0)
return "AD_Client_ID=" + sb.toString();
else
{
log.log(Level.SEVERE, "No Access Org records");
return "AD_Client_ID=-1"; // No Access Record
}
}
return "AD_Client_ID IN(" + sb.toString() + ")";
} // getClientWhereValue
/**
* Access to Client
* @param AD_Client_ID client
* @param rw read write access
* @return true if access
*/
public boolean isClientAccess(int AD_Client_ID, boolean rw)
{
if (AD_Client_ID == 0 && !rw) // can always read System
return true;
loadOrgAccess(false);
// Positive List
for (int i = 0; i < m_orgAccess.length; i++)
{
if (m_orgAccess[i].AD_Client_ID == AD_Client_ID)
{
if (!rw)
return true;
if (!m_orgAccess[i].readOnly) // rw
return true;
}
}
return false;
} // isClientAccess
/**
* Get Org Where Clause Value
* @param rw read write
* @return "AD_Org_ID=0" or "AD_Org_ID IN(0,1)" or null (if access all org)
*/
public String getOrgWhere (boolean rw)
{
if (isAccessAllOrgs())
return null;
loadOrgAccess(false);
// Unique Strings
HashSet<String> set = new HashSet<String>();
if (!rw)
set.add("0");
// Positive List
for (int i = 0; i < m_orgAccess.length; i++)
{
if (!rw)
set.add(String.valueOf(m_orgAccess[i].AD_Org_ID));
else if (!m_orgAccess[i].readOnly) // rw
set.add(String.valueOf(m_orgAccess[i].AD_Org_ID));
}
//
StringBuffer sb = new StringBuffer();
Iterator it = set.iterator();
boolean oneOnly = true;
while (it.hasNext())
{
if (sb.length() > 0)
{
sb.append(",");
oneOnly = false;
}
sb.append(it.next());
}
if (oneOnly)
{
if (sb.length() > 0)
return "AD_Org_ID=" + sb.toString();
else
{
log.log(Level.SEVERE, "No Access Org records");
return "AD_Org_ID=-1"; // No Access Record
}
}
return "AD_Org_ID IN(" + sb.toString() + ")";
} // getOrgWhereValue
/**
* Access to Org
* @param AD_Org_ID org
* @param rw read write access
* @return true if access
*/
public boolean isOrgAccess(int AD_Org_ID, boolean rw)
{
if (isAccessAllOrgs())
return true;
if (AD_Org_ID == 0 && !rw) // can always read common org
return true;
loadOrgAccess(false);
// Positive List
for (int i = 0; i < m_orgAccess.length; i++)
{
if (m_orgAccess[i].AD_Org_ID == AD_Org_ID)
{
if (!rw)
return true;
if (!m_orgAccess[i].readOnly) // rw
return true;
return false;
}
}
return false;
} // isOrgAccess
/**
* Can Report on table
* @param AD_Table_ID table
* @return true if access
*/
public boolean isCanReport (int AD_Table_ID)
{
if (!isCanReport()) // Role Level block
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -