[CakePHP]データベースACL利用時のプラグインコントローラへのアクセス制御方法

Cake のデータベースACLについて勉強するべく、CookBookにある開発例 『ACL を制御するシンプルなアプリケーション :: 開発例 :: マニュアル :: 1.2 Collection :: The Cookbook』 を試してみました。
実際にやってみて、『プラグインコントローラへのアクセス制御はどうすれば?』という疑問が沸いてきたので調べてみました。
準備
上記の開発例に従ってセットアップした後に、CookBookにあるプラグイン作成のサンプルである『ピザ注文プラグイン』を作成した状態を前提として説明を行います。
プラグインを作成する :: プラグイン :: CakePHPによる開発 :: マニュアル :: 1.2 Collection :: The Cookbook
アクセス制御方法
プラグイン毎にトップレベルのACOを用意してあげることで制御ができます。
まず、acosテーブルに新たなトップレベルのACOとして、"pizza_plugins"を追加して、その子ノードとしてPizzaOrdersController関連のACOを追加します。(aros_acosテーブルに追加したACOのパーミッション設定も必要)

acosテーブル
+----+-----------+-------+-------------+---------------+------+------+
| id | parent_id | model | foreign_key | alias | lft | rght |
+----+-----------+-------+-------------+---------------+------+------+
| 1 | NULL | | | controllers | 1 | 58 |
| 2 | 1 | | | Pages | 2 | 5 |
| 3 | 2 | | | display | 3 | 4 |
〜〜 省略 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
| 30 | NULL | | | pizza_plugins | 59 | 64 | ← 新しいトップレベルのACO
| 31 | 30 | | | PizzaOrders | 60 | 63 | ← pizza_pluginsが親ノード
| 32 | 31 | | | index | 61 | 62 | ← PizzaOrdersが親ノード
+----+-----------+-------+-------------+---------------+------+------+

そしてAppController::beforeFilter()内で、「通常のコントローラへのアクセス」と「プラグインコントローラへのアクセス」を振り分け、それぞれのトップレベルのACOをAuthComponentにセットしてあげれば、正しくアクセス制御が行われます。

<?php

function beforeFilter() {
$this->Auth->authorize = 'actions';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display');

if( empty($this->plugin) ) {
$this->Auth->actionPath = 'controllers/';
} else {
// トップレベルのACOは プラグイン名 + '_plugins'
$this->Auth->actionPath = $this->plugin . '_plugins/' ;
}
}

?>