CakePHP 特定のアカウントだけ編集できるようにする
cake PHP 1.2.3.8166.
Webアプリケーションでよくあるのは、ユーザーにユーザー自身のアカウントやプロフィールを編集させたいが、他のユーザーのものは見せたくないという動作ですよね。
Acl、Auth の機能を使ってなんとかさくっとできそうですが、残念ながらできません。
こちらのページにそんな場合の方法が書いてありますので、参考にしてください。
CakePHP ACL and Auth: Record Level Protection
簡単に内容を紹介させて頂きます。
上記のように、Acl、Auth の機能を使ってすぐになんとかというのはできないようです。
そのため、自分でfunctionを作るしかないです。
前提条件で、以下のことをやっておいてください。
- ユーザーがAROとして関連づけされていること
- そのAROが、UsersControllerへアクセスできるようにACOが設定されていること
- AROがedit function へアクセスできることたとえばユーザーに、自分のIDしか編集させたくない場合
//レコード番号がログインしているユーザーIDと同じであれば //Trueを返し、そうでなければFalseを返す。 //Aran worldさんでは$idではなく$recordIdとなっていました。 // UsersControllerへ記述 function checkUsersOwnRecord($id) { if( $this->Auth->user('id') == $id ){ return TRUE; } else { return FALSE; } }
編集functionに、この戻り値を判定させます。
// UsersControllerへ記述 //ユーザー編集 function edit($id = null) {
//ユーザー本人かどうか確認 if($this->checkUsersOwnRecord($id)){
ユーザー本人だった場合の処理
}else{ $this->Session->setFlash('このエリアへのアクセスは禁止されています。'); $this->redirect(array('action'=>'index')); }
ほかにも、下記のサイトでは管理者の場合すべてのアカウントを編集できるようにする方法などが載っています。
とても説明が丁寧なので、ぜひ参考にしてみてください。
CakePHP ACL and Auth: Record Level Protection