Vår blogg behöver endast två roller:
• administratör (admin)
• besökare (guest)
En administratör kan skriva, uppdatera och ta bort inlägg medan besökaren kan endast visa, lista och söka efter inlägg (givetvis har administratören samma rättigheter som besökaren).
Vi har valt att skapa rollerna och resurserna i en controller. Dessa kunde även ha lagrats i en config-fil eller i databasen.
Rollerna skapar vi så här:
PHP-kod:
$acl = new Zend_Acl();
// notera att addRole() implementerar fluent interface (http://en.wikipedia.org/wiki/Fluent_interface)
$acl->addRole(new Zend_Acl_Role('admin') )
->addRole(new Zend_Acl_Role('guest') );
Vad är en ”resurs”? Jo, i vårt fall så pekar resursen mot en viss action-metod i en viss controller.
PHP-kod:
$acl->add(new Zend_Acl_Resource('blog') ); // blogg controllern
$acl->add(new Zend_Acl_Resource('create'), 'blog' ); // metoden createAction()
$acl->add(new Zend_Acl_Resource('delete'), 'blog' ); // metoden deleteAction()
$acl->add(new Zend_Acl_Resource('index'), 'blog' ); // osv ...
$acl->add(new Zend_Acl_Resource('list'), 'blog' );
$acl->add(new Zend_Acl_Resource('search'), 'blog' );
$acl->add(new Zend_Acl_Resource('view'), 'blog' );
// vi vill att administratören skall ha full access
$acl->allow('admin', 'blog');
// begränsade rättigheter för besökaren
$acl->allow('guest', 'blog', 'index');
$acl->allow('guest', 'blog', 'list');
$acl->allow('guest', 'blog', 'search');
$acl->allow('guest', 'blog', 'view');
Nu till det viktiga, nämligen validering av förfrågan.
Vi behöver veta två saker:
• namnet på modulen
• namnet på action
Dessa två får vi fram genom:
$module = $this->_request->getModuleName();
$action = $this->_request->getActionName();
Själva valideringen:
PHP-kod:
$role = Zend_Auth::getInstance()->hasIdentity() ? 'admin' : 'guest';
if($acl->isAllowed($role, $module, $action) )
{
echo "ACCESS GRANTED";
{
else
{
echo "ACCESS DENIED!";
}

