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