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'
));
ぜひ活用してみてください。

