0

我正在建立一个 CMS 类型的网站,会有很多管理员用户。ACL 已用于业务层。但是现在我们想将自定义 ACL 逻辑应用于基于管理员用户所属城市的模型。

例如: 管理员用户来自纽约。他可以查看与纽约市相关的内容。

我在模型中使用 Zend_Db_Select 构建了很多查询。现在我到处都改变了查询。有没有办法,我可以为每个查询添加逻辑 ->where('u.city_id = ?', $admin_user_city_id) 。

提前致谢。

谢谢金星

4

1 回答 1

2

我认为您可能不需要扩展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根据您所使用的模型在某处正确连接到您的表。

于 2011-09-18T13:16:00.747 回答