根据用户字段cakePHP过滤数据

时间:2013-03-17 07:40:40

标签: cakephp

所以我有一个基于公司的系统,我将所有数据保存在一个数据库中,并通过使用所有表和users表中都存在的site_id字段来分隔数据。

现在我正在为每一个发现('全')做一个条件。是否有更全面的方式来做到这一点。也许在AppController中?即使是保存数据,我也必须在每次保存时设置site_id。

这样的东西
public function beforeFilter() {

    parent::beforeFilter();
    $this->set('site_id', $this->Auth->user('site_id'));

}

任何方向都只会有所帮助。感谢

1 个答案:

答案 0 :(得分:4)

<强> TLDR:

使用beforeFind()方法创建一个行为,为所有查询附加site_id条件。

示例/细节:

按照以下方式创建行为。注意,我从Configure变量获取siteId,但随时可以获得它。

<?php
class SiteSpecificBehavior extends ModelBehavior {

    public function setup(Model $Model, $settings = array()) {
        $Model->siteId = Configure::read('Site.current.id');
    }

    public function beforeFind(Model $Model, $query = array()) {
        $siteId = $Model->siteId;
        $query['conditions'][$Model->alias . '.site_id'] = $siteId ;
        return $query;
    }
}

然后在任何/所有要确保其特定于站点的模型上,添加:

public $actsAs = array('SiteSpecific');

这当然可以调整和改进,但它应该给你一个好主意。