2011-07-29 23 views
1

我有一个复杂的报告应用程序,允许客户端登录和查看其客户端数据的报告。应用程序的几个部分使用各种控制器进行数据库调用。我需要确保客户端A不通过头部操作获取客户端B的信息。如何检查从Zend Framework发送到数据库的每个查询

系统进行身份验证,并为其分配clientID和roleID。如果您的角色ID> 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代码中辨别出来...

我总是可以编写身份验证功能并以这种方式传递选定的查询,所有这些呼叫都将更容易实施,并且将来可以证明。任何帮助表示赞赏。

+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

另一种选择是扩展数据库适配器,以便可以直接拦截查询。国际海事组织,你应该尝试在应用层面上做到这一点。

相关问题