2011-07-29 62 views
1

我有一個複雜的報告應用程序,允許客戶端登錄和查看其客戶端數據的報告。應用程序的幾個部分使用各種控制器進行數據庫調用。我需要確保客戶端A不通過頭部操作獲取客戶端B的信息。如何檢查從Zend Framework發送到數據庫的每個查詢

系統進行身份驗證,併爲其分配clientID和roleID。如果您的角色ID> 1,這意味着您爲託管數據的公司工作,並且您可以查看所有客戶端信息。我想創建一個包羅萬象的,基本上是這樣的:

if($roleID > 1) { 

    ...send query to database 

    }else { 
    if(...does this query select a record with clientID other than my $auth->clientID){ 
    do not execute query 
    }else { 
    execute query 
    } 
} 

的問題是,我想這對於每一個進入到服務器的查詢運行......我怎麼可以把這個代碼爲「應用程序和數據庫之間的「障礙」?我已經使用Zend_Profiler來查看查詢,所以我知道它是某種可能的,但不能從Profiler代碼中辨別出來...

我總是可以編寫身份驗證功能並以這種方式傳遞選定的查詢,所有這些呼叫都將更容易實施,並且將來可以證明。任何幫助表示讚賞。

+0

我傾向於使用ZFdebug工具欄,它非常有幫助[數據庫:SQL查詢的完整列表和每個時間] http://jokke.dk/software/zfdebug – tawfekov

回答

1

它的應用程序設計錯誤。 你應該使用「服務架構」 - 唯一的查詢入口點是service。和裏面的任何檢查。

+0

不知道我明白...我以爲Zend Framework作爲僞服務? – CookiesBoxcar

+0

noup。它只是類的集合:) – SMka

1

如果這是你想要的跑每查詢的東西,我建議擴大Zend_Db_Select並覆蓋要麼query()assemble()功能,在你的邏輯補充。您還需要添加一種方法來了解您的$auth對象。

1

另一種選擇是擴展數據庫適配器,以便可以直接攔截查詢。國際海事組織,你應該嘗試在應用層面上做到這一點。

相關問題