どうも。トクハラです。
作ってる時に、タイトルのように何回か同じパターンがあった。
複数のユーザが使用するwebサービスなんかだと他のユーザさんのデータが見えちゃったりしたら
一大事ですよね。
こういうのはテストで潰していくしかないんだろうか・・・と思ってたけど
さすがcakePHP!大好きだ!
モデルに以下を追加することで解決しました。
/** * 共通処理 * 目的: 複数のユーザで使うことを想定しているためfindの条件に常に$user_idを付加したい * @var array */ public $user_id = 'aaa'; public function beforeFind($queryData) { parent::beforeFind($queryData); $defaultConditions = array('MasItem.user_id' => $this->user_id); $queryData['conditions'] = array_merge($queryData['conditions'], $defaultConditions); return $queryData; }
AppController.phpではこんなふうにモデルに条件を詰めてやる。
public function beforeFilter() { $this->{$this->modelClass}->user_id = $this->Auth->user('id'); }
※コントローラ上で$this->modelClassと書くと、自分が属するモデル名が取得できるぜ!
あと、{}でくくると、文字列をオブジェクトして扱えるんだね。
昔、javaで同じことやろうとしてcastにものすごく時間がかかったことが夢のようです。
ちなみにいつものごとくstackoverflowが元ネタです。ありがとう!
http://stackoverflow.com/questions/18094375/beforefind-add-conditions
あと、共通化せずに書いてしまった過去のソースを直したくてしょうがない。
納品後だとバグというほどでもないので直せないんだよね・・・。