Meddelande

Minska
No announcement yet.

Blogga med Zend Framework - Del 10: Zend_Acl

Minska
X
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Blogga med Zend Framework - Del 10: Zend_Acl

    Där Zend_Auth användes för att identifiera användaren, används Zend_Acl till för att verifiera om användaren har access till en viss resurs/sida. I ZF talar vi om roller och resurser; en roll har access till vissa resurser.

    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') ); 
    Nästa steg är att definiera resurserna. Lyckligtvis så behöver vår blogg rätt så få resurser så det blir inte så mycket att skriva.

    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'); 
    Zend_Acl är mer kraftfull och erbjuder bl. a roller som ärver rättigheterna av en roll. Då vår blogg är så enkel så är vi nöjda med ovanstående konfiguration!

    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!";

    Min blogg | Mina böcker
Working...
X