DevExpress eXpress持久对象(XPO)通过WCF

时间:2010-07-20 13:33:56

标签: .net database wcf devexpress orm

大家好,所有DevExpress开发者! =)

我正在尝试远程控制Express Persistent Objects。

实际上,XPO允许两种不同的方法 - 直接访问数据库,并通过WebService / WCF。

出于安全考虑,我们选择了第二种选择。现在,WCF包装数据库访问,客户端必须对自身进行身份验证才能访问数据库。

该软件是文件管理系统。因此,它的主数据库表(从XpObject继承的类)是“Documents”和“Users”。我们还有另外的表(XPO类),“DocumentUserAccess”,它通过关联将用户和文档绑定在一起。客户端通过XPCollections检索数据。

即使客户端现在必须进行身份验证,我们也必须限制他们访问某些文档(管理员应该可以访问所有文档)。

Web服务部分包含以下用于进行远程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和名称。例如,客户可以根据日期范围请求收集文档。

因此,在数据库请求执行之前,我们无法找出客户端将接收或修改哪些行,我们无法检查这些行是否可供他访问。

任何帮助都会非常感激。

谢谢你, 约翰

1 个答案:

答案 0 :(得分:1)

据我们所知,问题的答案发布在:

http://www.devexpress.com/Support/Center/ViewIssue.aspx?issueid=Q266294

:)