ACLによる管理画面アクセスの制御
前の記事の続き
拡張のAuthコンポーネントで対応しました。
AROおよびACOの設定は、前の記事のままで同じ。
拡張のAuthコンポーンネントに、isAuthorized()を継承して作成。parentの処理の後にprefixチェックを追加。
app/controllers/components/auth_plus.php
function isAuthorized($type = null, $object = null, $user = null) { $valid = parent::isAuthorized($type, $object, $user); // 管理画面アクセス権限チェック if ($valid) { if (isset($this->params['prefix']) && $this->params['prefix'] == Configure::read('Routing.admin')) { $valid = $this->Acl->check( $this->user(), 'admin', $this->actionMap[$this->params['action']] ); } } return $valid; }
パーミッションの設定。
[cake@cake console]$ ./cake acl grant Group.1 controllers all [cake@cake console]$ ./cake acl grant Group.1 prefix all [cake@cake console]$ ./cake acl deny Group.4 controllers all [cake@cake console]$ ./cake acl grant Group.4 Users all [cake@cake console]$ ./cake acl grant Group.4 prefix all [cake@cake console]$ ./cake acl deny Group.4 admin all
この設定で、以下の通りアクセス制御できました。
Group.1(SuperAdministrator)
対象 | アクセス可否 | ||
admin/groups/ | 可 | ||
admin/users/ | 可 | ||
/users/ | 可 |
Group.4(一般メンバー)
対象 | アクセス可否 | ||
admin/groups/ | 不可 | ||
admin/users/ | 不可 | ||
/users/ | 可 |