[cakephp2]model検索パラメータをパーミッションにより自動制限

model検索パラメータをパーミッションにより自動制限したい場合どうしたらいいか?
例えばこういう場合

userがスーパーユーザーの時は全部検索してOKだが、一般ユーザーの場合は何等かパラメータを付けて制限したい場合
いちいちコントローラーでパラメータを書くのは面倒&書き忘れるかもしれません。

そんな場合はmodel::beforeFind()メソッドに書いちゃいましょう。
※User.role=1 がスーパーユーザー 一般ユーザーの場合は User.group_idで示されるグループ内のデータのみ参照可能という場合を想定しています。

public function beforeFind($queryData){
	$Auth = new AuthComponent(new ComponentCollection());
	if($Auth->user('role')!=1){
		$queryData['conditions'][]=array("{$this->name}.group_id"=>$Auth->user('group_id'));
	}
	return $queryData;
}

これで書き忘れ無し!超便利!

ただし、大人の事情でこのコールバックを無視したい場合は、findメソッドを呼ぶときにコールバックを無効にすればOKです。

//コールバック全部無効
$this->find('first', array(
    'callbacks' => false
));
//beforeだけ有効
$this->find('first', array(
    'callbacks' => 'before'
));
//afterだけ有効
$this->find('first', array(
    'callbacks' => 'after'
));

ぜひ活用してみてください。

タイトルとURLをコピーしました