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/