Zend_Aclは認可を扱うクラスです。
Zend_Authの認証とどう違うの?というと、認証はログインできるかどうかの判断、すなわち本人確認を行います。
それに対して認可は認証した後のアクセス権限を意味します。
ブログシステムがあったとして、Zend_Authは管理画面にログインできるかどうかをチェックします。
Zend_Aclは、私は自分のブログを編集できますが他人のブログは編集できず、管理者は誰のブログでも編集できる、といったログイン後に必要となる権限を操作します。
そういった立場上Zend_Authと同時に使用するべきなのですが、まあ今回はとりあえず単品で使ってみます。
リファレンスガイドではのっけからロールの多重継承とか複数のロールに属するとか面倒な解説がなされていますが、いきなりそんなことやったって理解できるわけなかろうがと。
ということでまずは単純な例を作ってみます。
上記では、memberロールを持つユーザはサーバ管理者にしか許されない操作は行えませんが、サーバ管理者はブログ管理者が行える操作は全て行える、という設定になります。
とても簡単に認可制御が行えました。
あとは各ユーザ毎にmemberかadminかを示すフラグを設定すれば完成、めでたしめでたし。
Zend_Authの認証とどう違うの?というと、認証はログインできるかどうかの判断、すなわち本人確認を行います。
それに対して認可は認証した後のアクセス権限を意味します。
ブログシステムがあったとして、Zend_Authは管理画面にログインできるかどうかをチェックします。
Zend_Aclは、私は自分のブログを編集できますが他人のブログは編集できず、管理者は誰のブログでも編集できる、といったログイン後に必要となる権限を操作します。
そういった立場上Zend_Authと同時に使用するべきなのですが、まあ今回はとりあえず単品で使ってみます。
リファレンスガイドではのっけからロールの多重継承とか複数のロールに属するとか面倒な解説がなされていますが、いきなりそんなことやったって理解できるわけなかろうがと。
ということでまずは単純な例を作ってみます。
<?php
//Zend_Acl
require_once('Zend/Acl.php');
$acl = new Zend_Acl();
//ロールを作成
$acl->addRole(new Zend_Acl_Role('admin'))
->addRole(new Zend_Acl_Role('member'));
//リソースを作成
$resourceAdmin = new Zend_Acl_Resource('adminResource');
$resourceMember = new Zend_Acl_Resource('memberResource');
//Aclにリソースを付与
$acl->add($resourceAdmin);
$acl->add($resourceMember);
//ロールに、リソースに対する権限を付与
$acl->allow('admin', 'adminResource');
$acl->deny ('member','adminResource');
$acl->allow('admin', 'memberResource');
$acl->allow('member','memberResource');
//権限があるかチェック
var_dump($acl->isAllowed('admin', 'memberResource')); //true
var_dump($acl->isAllowed('member','adminResource')); //false
memberはブログ管理者つまり私、adminはサーバ管理者つまり忍者ブログの中の人を想定しています。上記では、memberロールを持つユーザはサーバ管理者にしか許されない操作は行えませんが、サーバ管理者はブログ管理者が行える操作は全て行える、という設定になります。
とても簡単に認可制御が行えました。
あとは各ユーザ毎にmemberかadminかを示すフラグを設定すれば完成、めでたしめでたし。
PR
トラックバック
トラックバックURL: