論点ではないと思います。管理機能をそれぞれのコントローラに配置し (つまり、すべてを 1 つの「管理」コントローラにまとめる必要はありません)、Cake に組み込まれている「管理」プレフィックス ルーティングを使用して、それらを安全に保ちます。これは CakePHP が承認した方法であり、CakePHP では Bake コンソールを介してこの方法で管理機能を作成できます。
AppController で数行の単純なコードを使用して、admin_ で始まるすべてのコントローラー機能を保護できます。すべての管理機能は、次のような整然とした一貫した URL を介してアクセスできます。
これで始められるはずです:http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing
さらにサポートが必要な場合はお知らせください。詳細情報で回答を更新します。
編集:詳細...
管理ルーティングを設定する手順は次のとおりです。
1/ app/Config/core.php の 113 行付近で、次の行が存在し、コメントが解除されていることを確認します。
Configure::write('Routing.prefixes', array('admin'));
2/ app/Controller/AppController.php (つまり、コントローラーのスーパークラス) で、beforeFilter メソッドの管理ルーティングをテストします。これを各コントローラーの beforeFilter で実行しないでください。これは、DRY 原則に準拠していません。例として、私の前のフィルターメソッドを次に示します。
function beforeFilter() {
if (isset($this->request->params['admin'])) {
// the user has accessed an admin function, so handle it accordingly.
$this->layout = 'admin';
$this->Auth->loginRedirect = array('controller'=>'users','action'=>'index');
$this->Auth->allow('login');
} else {
// the user has accessed a NON-admin function, so handle it accordingly.
$this->Auth->allow();
}
}
3/ すべての管理機能の前に admin_ を付けると、プレフィックス ルーティングを介して自動的に利用できるようになります。
例えば。
function admin_dostuff () { echo 'hi from the admin function'; } // This will be available via http://www.example.com/admin/my_controller/dostuff
function dostuff () { echo 'hi from the NON-admin function'; } // This will be available via http://www.example.com/my_controller/dostuff
セットアップが完了したら、admin 関数の前に admin_ を付けるだけで、Cake がすべて処理してくれます。わかる?
編集2:
あなたの状況に役立つはずの簡単に書かれたサンプルコードを次に示します。
function beforeFilter() {
if (isset($this->request->params['admin'])) {
// the user has accessed an admin_ function, so check if they are an admin.
if ($this->Auth->user('user_type') == 1){
// an Admin user has accessed an admin function. We can always allow that.
$this->Auth->allow();
} else {
// A non-admin user has accessed an admin function, so we shouldn't allow it.
// Here you can redirect them, or give an error message, or something
}
} else {
// the user has accessed a NON-admin function, so handle it however you want.
$this->Auth->allow(); // this example gives public access to all non-admin functions.
}
}