2010-07-20 24 views
1

你好所有的DevExpress開發者! =)通過WCF的DevExpress eXpress持久對象(XPO)

我試圖馴服快速持久對象遠程。

實際上,XPO允許兩種不同的方法 - 直接訪問數據庫,並通過WebService/WCF。

出於安全原因,我們選擇了第二個選項。現在,WCF包裝數據庫訪問權限,並且客戶端必須驗證自己才能訪問數據庫。

該軟件是一個文件管理系統。因此,其主數據庫表(從XpObject繼承的類)是「文檔」和「用戶」。我們還有附加表(XPO類),「DocumentUserAccess」,它通過關聯將用戶和文檔綁定在一起。客戶端通過XPCollections檢索數據。

儘管客戶端現在必須進行身份驗證,但我們必須限制他們訪問某些文檔(而管理員應該可以訪問所有文檔)。

WebService的部分包含了實現遠程XPO訪問可能下面的代碼:

Private Function Common_IDataStoreContract_ModifyData(ByVal ParamArray dmlStatements As ModificationStatement()) As ModificationResult Implements IDataStoreContract.ModifyData 

     Return wrappedDataStore.ModifyData(dmlStatements) 


    End Function 


    Private Function Common_IDataStoreContract_SelectData(ByVal ParamArray selects As SelectStatement()) As SelectedData Implements IDataStoreContract.SelectData 


     Dim data As SelectedData = wrappedDataStore.SelectData(selects) 
     Return data 


    End Function 

而且它很容易限制訪問某些表:

For Each statement In dmlStatements 

     If Not UserCanAccessTable(OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name, statement.TableName) Then 
      Throw New Security.SecurityAccessDeniedException("You aren't allowed to modify this table.") 
     End If 

    Next 

,但我們不能圖瞭解如何限制對某些ROWS的訪問。

如上所示,客戶端請求的所有標準和其他參數均可在語句(DevExpress.XPO.DB.ModificationStatement類)中訪問。

與此同時,如何檢查用戶是否請求特定的文檔?客戶可以使用不同的標準來獲取文檔,而不僅僅是OID和名稱。例如,客戶可以根據日期範圍請求收集文件。

因此,直到數據庫請求執行完畢,我們才發現客戶端將接收或修改哪些行,並且我們無法檢查這些行是否可以訪問。

任何幫助將不勝感激。

謝謝 約翰

回答