あなたの状況の問題は、pagesController によって表示されるすべてのページが同じアクション ( display()
) であり、異なるパラメーター (表示するページ) のみを使用することです。したがって、すべてのページへのアクセスがブロックされるため、display アクションへのアクセスをブロックすることはできません。
ページ数が限られている場合、これを実装する最も簡単な方法はControllerAuthorize
. こちらのドキュメントをお読みください。ControllerAuthorize の使用
class AppController extends Controller {
public $components = array(
'Auth' => array('authorize' => 'Controller'),
);
public function isAuthorized($user = null) {
// Make all actions public
return true;
}
}
次に、ページコントローラー内で;
class PagesController extends AppController {
public function isAuthorized($user = null) {
if ('display' !== $this->request->action) {
// other actions; let he AppController handle access
return parent::isAuthorized($user);
}
if (!empty($user)) {
// Logged-in users have access to any page
return true;
}
$page = empty($this->request->params['pass'][0]) ? null : $this->request->params['pass'][0];
switch($page) {
case 'home':
case 'about':
// etc
return true;
}
// all other pages are 'private'
return false;
}
}
もちろん、ニーズに合わせて変更してください