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

.net 通过WCF的DevExpress eXpress持久对象(XPO),.net,database,wcf,devexpress,orm,.net,Database,Wcf,Devexpress,Orm,大家好,DevExpress开发人员!=) 我正在尝试远程驯服Express持久对象 实际上,XPO允许两种不同的方法——直接访问数据库和通过WebService/WCF访问数据库 出于安全考虑,我们选择了第二种选择。现在,WCF包装了数据库访问,客户端必须进行身份验证才能访问数据库 该软件是一个文档管理系统。因此,它的主要数据库表(从XpObject继承的类)是“文档”和“用户”。我们还有额外的表(XPO类),“DocumentUserAccess”,它通过关联将用户和文档绑定在一起。客户端通

大家好,DevExpress开发人员!=)

我正在尝试远程驯服Express持久对象

实际上,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
但是,我们不知道如何限制对某些行的访问

如上所述,客户端请求的所有标准和其他参数都可以在语句(DevExpress.XPO.DB.ModificationStatement类)中访问

同时,如何检查用户是否请求特定文档?客户端可以使用不同的标准获取文档,而不仅仅是OID和名称。例如,客户机可以根据日期范围请求收集文档

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

任何帮助都将不胜感激

谢谢,,
约翰

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


:)

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

:)