我正在建立一个CMS类型的网站,会有很多管理员用户。 ACL已用于业务层。但现在我们想要将自定义ACL逻辑应用于基于admin用户所在城市的模型。
例如: 管理员用户来自纽约。他可以查看与纽约市相关的内容。
我在模型中使用Zend_Db_Select构建了很多查询。现在我已经在各处更改了查询。有没有办法,我可以添加逻辑 - > where('u.city_id =?',$ admin_user_city_id) 对于每个查询。
提前致谢。
由于 VENU
答案 0 :(得分:2)
我认为您可能不需要扩展Zend_Db_Table_Select
。只需将Zend_Db_Table_Abstract
扩展为My_Db_Table_Abstract
所有模型也将延伸,您就可以实现所需要的功能。在该抽象类中,您将扩展返回select()
的默认Zend_Db_Table_Select
,并在返回之前,只需将where子句添加到其中。
因此,每当你用$myModel -> select()
调用一个select时,它就会包含你的where子句。
abstract class My_Db_Table_Abstract extends Zend_Db_Table_Abstract
{
public function select($withFromPart = self::SELECT_WITHOUT_FROM_PART)
{
$select = parent::select($withFromPart);
# Retreive $admin_user_city_id
$select -> where('u.city_id = ?', $admin_user_city_id);
return $select;
}
}
当然,这也意味着您已经根据您所在的模型在某个地方与u
表格进行了正确的连接。