2013-03-17 51 views
0

因此,我有一个基于公司的系统,我将所有数据保存在一个数据库中,并使用存在于所有表和用户表中的site_id字段来分隔数据。根据用户字段筛选数据CakePHP

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

喜欢的东西

public function beforeFilter() { 

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

} 

任何方向只会帮助。由于

回答

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'); 

这可以调整和明显的进步,但它应该给你一个好主意。

+0

非常聪明!非常感谢您使用准确的代码和帮助。 – AshHimself 2013-03-17 09:04:12