isAuthorizedが機能しない、
現在cookboodのチュートリアルを参考にブログを作成しており,ログイン後ログインユーザーが他の著者の投稿を編集したり削除したりするのを防ぐように、アプリケーションをセキュアに保つためにisAuthorized()で管理しようとしています。
ログインユーザーは投稿を全員できる。投稿の編集、削除はログインユーザーと投稿者がマッチすれば編集、削除できいるようにする。
このようにisAuthorizedを設定しすると、動作確認で自分の投稿への編集、削除にはアクセスできるのですが、urlのパラメーターで他の人の投稿にアクセスすると
Missing Controller Error: サーバー名Controller could not be found. Error: Create the class サーバー名Controller below in file: app/Controller/サーバー名Controller.php
となってしまいます。しらべてもサーバー名Controller が存在しないことが理由のようですがサーバー名Controller はそもそも必要がありません。理由がわからず詰まってます、ご教授いただけると幸いです
AppController.php
class AppController extends Controller { public $helpers = array('Html', 'Form', 'Flash', 'Session'); public $components = array( 'DebugKit.Toolbar', 'Flash', 'Session', 'Auth' => array( 'loginRedirect' => array( 'controller' => 'posts', 'action' => 'index' ), 'logoutRedirect' => array( 'controller' => 'posts', 'action' => 'index' ), 'authenticate' => array( 'Form' => array( 'passwordHasher' => 'Blowfish', 'fields' => array( 'username' => 'email', 'password' => 'password' ) ) ), 'loginAction' => array( 'controller' => 'users', 'action' => 'login' ), 'authorize' => array('Controller') ) ); public function isAuthorized($user) { return false; } public function beforeFilter() { $this->Auth->allow('index', 'view'); $this->set('auth', $this->Auth->user()); } }
PostController.php
class PostsController extends AppController { public function isAuthorized($user) { if ($this->action === 'add') { return true; } if (in_array($this->action, array('edit', 'delete'))) { $postId = (int)$this->request->params['pass'][0]; if ($this->Post->isOwnedBy($postId, $user['id'])) { return true; } } }
Post.php
class Post extends AppModel { public $belongsTo = 'User'; public $validate = array( 'title' => array( 'rule' => 'notBlank' ), 'body' => array( 'rule' => 'notBlank' ) ); public function isOwnedBy($post, $user) { return $this->field('id', array('id' => $post, 'user_id' => $user)) !== false; } }
あなたの回答
tips
プレビュー