DevExpress eXpress Постоянные объекты (XPO) через WCF - PullRequest
1 голос
/ 20 июля 2010

Привет всем разработчикам DevExpress! =)

Я пытаюсь приручить Экспресс постоянные объекты удаленно.

На самом деле XPO допускает два разных подхода - прямой доступ к базе данных и через WebService / WCF.

В целях безопасности мы выбрали второй вариант. Теперь WCF обертывает доступ к базе данных, и клиенты должны аутентифицировать себя для доступа к базе данных.

Программное обеспечение является системой управления документами. Поэтому его основными таблицами базы данных (классы, унаследованные от XpObject) являются «Документы» и «Пользователи». У нас также есть дополнительная таблица (класс XPO), «DocumentUserAccess», которая связывает пользователей и документы вместе посредством ассоциаций. Клиенты получают данные через XPCollections.

Даже если клиенты должны проходить аутентификацию сейчас, мы должны ограничить их доступ к некоторым документам (в то время как администраторы должны иметь доступ ко всем документам).

Часть веб-сервиса содержит следующий код для обеспечения удаленного доступа к 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 и имена. Например, клиент может запросить сбор документов на основе диапазона дат.

Таким образом, до тех пор, пока запрос к базе данных не будет выполнен, мы не можем выяснить, какие строки клиент получит или изменит, и мы не можем проверить, доступны ли ему эти строки.

Любая помощь будет очень признательна.

Спасибо, John

1 Ответ

1 голос
/ 22 июля 2010

Насколько нам известно, ответ на вопрос размещен по адресу:

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

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...