Как проверить каждый запрос, поступающий в БД из Zend Framework - PullRequest
1 голос
/ 29 июля 2011

У меня есть сложное приложение для составления отчетов, которое позволяет клиентам входить в систему и просматривать отчеты для своих клиентских данных.Есть несколько разделов приложения, где есть вызовы базы данных, использующие различные контроллеры.Мне нужно убедиться, что клиент A не получает информацию о клиенте B посредством манипуляции с заголовком.

Система проверяет подлинность и присваивает им clientID и roleID.Если ваш roleID> 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 ...

Я всегда могу написать функцию аутентификации и таким образом передавать выбранные запросы, но этоВсеобщее общение будет проще реализовать во всех вызовах, и оно будет перспективным.Любая помощь приветствуется.

Ответы [ 4 ]

1 голос
/ 30 июля 2011

Другой вариант - расширить адаптер базы данных, чтобы вы могли перехватывать запросы напрямую. ИМО, хотя вы должны попытаться сделать это на уровне приложения.

1 голос
/ 29 июля 2011

это ошибка дизайна приложения. Вы должны использовать «сервисную архитектуру» - единственной точкой входа для запросов будет service. и любые проверки внутри него.

1 голос
/ 30 июля 2011

Если это то, что вы хотите выполнить для каждого запроса, я бы предложил расширить Zend_Db_Select и перезаписать либо функции query(), либо assemble(), чтобы добавить их в свою логику.Вы также захотите добавить способ, чтобы он знал о вашем $auth объекте.

0 голосов
/ 29 июля 2011

В зависимости от вашего сервера базы данных, вы можете поставить трассировку на стороне БД.

Вот пример для Oracle:

http://orafaq.com/wiki/SQL_Trace

...