2011-07-29 1 views
1

클라이언트가 클라이언트 데이터에 대한 보고서를 로그인하고 볼 수있는 복잡한보고 응용 프로그램이 있습니다. 여러 컨트롤러를 사용하여 데이터베이스 호출이있는 응용 프로그램의 여러 섹션이 있습니다. 클라이언트 A가 헤더 조작을 통해 클라이언트 B의 정보를 얻지 못하게해야합니다.Zend Framework에서 DB로 이동하는 모든 쿼리를 검사하는 방법

시스템에서 인증하고 clientID 및 roleID를 할당합니다. roleID> 1이면 데이터를 호스팅하는 회사에서 일한다는 것을 의미하며 모든 클라이언트 정보를 볼 수 있습니다. 내가 만들 포괄 모두는 기본적으로 다음과 같이 작동 : I "는 같은 코드를 삽입 할 수있는 방법

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 
    } 
} 

문제는 내가이 서버로가는 모든 쿼리에 대해 실행하려는입니다 ... 로드 블록 "응용 프로그램과 DB 사이에? 이미 Zend_Profiler를 사용하여 쿼리를 살펴본 결과 어떻게 든 가능하다는 것을 알았으므로 프로파일 러 코드에서이를 식별 할 수는 없습니다 ...

필자는 언제나 인증 기능을 작성하고 그런 식으로 선택한 쿼리를 전달할 수 있지만, 모든 호출에서 구현하기가 더 쉬울 것이고 미래의 증거가 될 것입니다. 어떤 도움을 주셔서 감사합니다.

+0

나는 ZFdebug 툴바를 사용하는 경향이있다. [데이터베이스 : 각 SQL 쿼리의 전체 목록과 각 시간] http://jokke.dk/software/zfdebug – tawfekov

답변

1

이 애플리케이션 설계 오류입니다. 당신은 '서비스 아키텍처'를 사용합니다. 쿼리의 유일한 진입 점은 service입니다. 그 안에있는 수표들. 이것은 당신이 에있는 모든 쿼리를 실행하려는 것이라면

+0

Zend Framework 의사 서비스로 행동 했나요? – CookiesBoxcar

+0

noup. 그것은 단지 클래스의 컬렉션입니다 :) – SMka

1

, 나는 Zend_Db_Select을 확장 제안하고 논리에 추가 할 query() 또는 assemble() 기능 중 하나를 덮어 쓸 것입니다. $auth 개체를 인식 할 수있는 방법을 추가하는 것이 좋습니다.

1

다른 옵션은 쿼리를 직접 가로 채기 위해 데이터베이스 어댑터를 확장하는 것입니다. IMO, 당신은 시도하고 응용 프로그램 수준 에서이 작업을 수행해야합니다.