1

我正在尝试过滤查询结果。用户只能看到与他的 company_group_id 相同的公司,所以我很难在模型的 beforeFind 函数中添加该条件。

function beforeFind($queryData) {
    App::uses('CakeSession', 'Model/Datasource');
    $user = CakeSession::read('Auth.User');
    $queryData['conditions']['Company.company_group_id'] = $user['company_group_id'];
    parent::beforeFind($queryData);
}

当我 pr() 我的 $queryData 时,我可以看到这种情况出现

Array
(
[conditions] => Array
    (
        [Company.company_group_id] => 2
    )

)

不幸的是,当我调用分页时产生的查询忽略了这个条件

SELECT `Company`.`id`, ... WHERE 1 = 1 GROUP BY `Company`.`id` ORDER BY `Company`.`name` asc LIMIT 10

我这样做正确吗?还是有其他方法可以向用户显示正确的记录?

4

1 回答 1

0

您必须在控制器的操作中配置分页行为(更多信息请参见此处):

//obtaining the company_group_id
$user = CakeSession::read('Auth.User');
$id = $user['company_group_id'];

//setting the pagination conditions (similar to a find())
$this->paginate = array(
    'conditions' => array('Company.company_group_id' => $id),
);

$data = $this->paginate('Company');
$this->set('data', $data);
于 2012-08-07T13:10:22.573 回答