2010-11-27 56 views
0

我在網頁上的工作是檢查ROLE_ID = 3或是否如果是3,那麼組合框的條件可見

 if ((Int32.Parse(Session["RoleID"].ToString()) == 3)) 

     { 

      cmbempList.Visible = false; 

     } 

現在我想檢查與ROLE_ID = 3的用戶是指導者與否,如果他是導師,那麼cmbempList將對他可見。

public bool CheckMentorAccess() 

    { 

     bool blnAllow = false; 

     try 
     { 
      string strSelectMentorQuery = "SELECT COUNT(DISTINCT MLL.LED_ID) FROM M_USER_DETAILS MUD INNER JOIN M_LEADERLED MLL " 
       + "ON MLL.LED_ID = MUD.PK_ID WHERE MLL.LEADER_ID = '" + Session["UserID"].ToString() 
       + "' AND MUD.ACTIVE = 1 AND MLL.START_DATE <= Getdate() AND" 
       + " MLL.END_DATE > Getdate()"; 

      int intNoOfMembers = Convert.ToInt32(cSQLHelper.myExecuteScalar(strSelectMentorQuery)); 

      if (intNoOfMembers > 0) 
      { 
       blnAllow = true; 
      } 

     } 
     catch (Exception ex) 
     { 
      ExceptionLogger.LogException(ex); 
      blnAllow = false; 
     } 

     // Return the value 
     return blnAllow; 
    } 

如果此函數返回true,並且ROLE_ID = 3,那麼cmbempList將對他可見。

有人能幫助我嗎?

+0

@OP - 你應該考慮修改你的SQL使用參數化查詢,或者存儲過程,以降低風險SQL注入。在你提供的例子中,如果`Session [「UserID」]`恰好被設置爲惡意字符串,你就會被注入。 – 2010-11-27 05:52:06

回答

1

什麼是那麼問題,你有CheckMentorAccess()函數,如果登錄用戶返回true的導師,你已經在會話變量存儲RULEID所以現在您的業務規則說,

現在我想檢查ROLE_ID = 3的用戶是否是指導者,如果他是導師,那麼cmbempList將對他可見

如果你分析這句話

,它包含兩個語句

1-用戶必須有一個角色ID = 3

2 - 用戶必須被導師。

所以如果你想結合這些語句,它將成爲用戶必須有role_id = 3,用戶必須是導師。

所以轉換上述條件中的C#代碼

int roleId 

if(int.TryParse(Session["RoleID"].ToString(),out roleId)) 
{ 
    cmbempList.Visible = ((roleId == 3) && CheckMentorAccess()); 
}