我正在建立一个 CMS 类型的网站,会有很多管理员用户。ACL 已用于业务层。但是现在我们想将自定义 ACL 逻辑应用于基于管理员用户所属城市的模型。
例如: 管理员用户来自纽约。他可以查看与纽约市相关的内容。
我在模型中使用 Zend_Db_Select 构建了很多查询。现在我到处都改变了查询。有没有办法,我可以为每个查询添加逻辑 ->where('u.city_id = ?', $admin_user_city_id) 。
提前致谢。
谢谢金星
我正在建立一个 CMS 类型的网站,会有很多管理员用户。ACL 已用于业务层。但是现在我们想将自定义 ACL 逻辑应用于基于管理员用户所属城市的模型。
例如: 管理员用户来自纽约。他可以查看与纽约市相关的内容。
我在模型中使用 Zend_Db_Select 构建了很多查询。现在我到处都改变了查询。有没有办法,我可以为每个查询添加逻辑 ->where('u.city_id = ?', $admin_user_city_id) 。
提前致谢。
谢谢金星
我认为您可能不需要扩展Zend_Db_Table_Select
. 您可以通过仅扩展所有模型也将扩展Zend_Db_Table_Abstract
的 a来完成您正在寻找的事情。My_Db_Table_Abstract
在那个抽象类中,您将扩展select()
返回 a的默认值,Zend_Db_Table_Select
并且在返回它之前,您只需将 where 子句添加到它。
因此,每次您调用 select 时,$myModel -> 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
根据您所使用的模型在某处正确连接到您的表。