IDEMPIERE-329 : Tree on windows don't apply role restriction

This commit is contained in:
Nicolas Micoud 2012-07-05 10:46:33 +02:00
parent 0558c4dacf
commit 13f7391926
1 changed files with 29 additions and 13 deletions

View File

@ -195,19 +195,35 @@ public class MTree extends MTree_Base
private void loadNodes (int AD_User_ID) private void loadNodes (int AD_User_ID)
{ {
// SQL for TreeNodes // SQL for TreeNodes
StringBuffer sql = new StringBuffer("SELECT " StringBuffer sql = new StringBuffer();
+ "tn.Node_ID,tn.Parent_ID,tn.SeqNo,tb.IsActive " if (getTreeType().equals(TREETYPE_Menu)) // specific sql, need to load TreeBar IDEMPIERE 329 - nmicoud
+ "FROM ").append(getNodeTableName()).append(" tn" {
+ " LEFT OUTER JOIN AD_TreeBar tb ON (tn.AD_Tree_ID=tb.AD_Tree_ID" sql = new StringBuffer("SELECT "
+ " AND tn.Node_ID=tb.Node_ID " + "tn.Node_ID,tn.Parent_ID,tn.SeqNo,tb.IsActive "
+ (AD_User_ID != -1 ? " AND tb.AD_User_ID=? ": "") // #1 (conditional) + "FROM ").append(getNodeTableName()).append(" tn"
+ ") " + " LEFT OUTER JOIN AD_TreeBar tb ON (tn.AD_Tree_ID=tb.AD_Tree_ID"
+ "WHERE tn.AD_Tree_ID=?"); // #2 + " AND tn.Node_ID=tb.Node_ID "
if (!m_editable) + (AD_User_ID != -1 ? " AND tb.AD_User_ID=? ": "") // #1 (conditional)
sql.append(" AND tn.IsActive='Y'"); + ") "
sql.append(" ORDER BY COALESCE(tn.Parent_ID, -1), tn.SeqNo"); + "WHERE tn.AD_Tree_ID=?"); // #2
if (!m_editable)
sql.append(" AND tn.IsActive='Y'");
sql.append(" ORDER BY COALESCE(tn.Parent_ID, -1), tn.SeqNo");
}
else // IDEMPIERE 329 - nmicoud
{
String sourceTableName = getSourceTableName(getTreeType());
sql = new StringBuffer("SELECT "
+ "tn.Node_ID,tn.Parent_ID,tn.SeqNo,st.IsActive "
+ "FROM ").append(sourceTableName).append(" st "
+ "LEFT OUTER JOIN ").append(getNodeTableName()).append(" tn ON (tn.Node_ID=st."+sourceTableName+"_ID) "
+ "WHERE tn.AD_Tree_ID=?"); // #2
if (!m_editable)
sql.append(" AND tn.IsActive='Y'");
sql.append(" ORDER BY COALESCE(tn.Parent_ID, -1), tn.SeqNo");
sql = new StringBuffer(MRole.getDefault().addAccessSQL(sql.toString(), "st", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO)); // SQL_RO for Org_ID = 0
}
log.finest(sql.toString()); log.finest(sql.toString());
// The Node Loop // The Node Loop
try try
{ {
@ -216,7 +232,7 @@ public class MTree extends MTree_Base
// //
PreparedStatement pstmt = DB.prepareStatement(sql.toString(), get_TrxName()); PreparedStatement pstmt = DB.prepareStatement(sql.toString(), get_TrxName());
int idx = 1; int idx = 1;
if (AD_User_ID != -1) if (AD_User_ID != -1 && getTreeType().equals(TREETYPE_Menu)) // IDEMPIERE 329 - nmicoud
pstmt.setInt(idx++, AD_User_ID); pstmt.setInt(idx++, AD_User_ID);
pstmt.setInt(idx++, getAD_Tree_ID()); pstmt.setInt(idx++, getAD_Tree_ID());
// Get Tree & Bar // Get Tree & Bar