<?php

abstract class Todojsc_Model_Acl_Abstract extends SF_Model_Abstract
    implements Todojsc_Model_Acl_Interface, Zend_Acl_Resource_Interface
{
    protected $_acl;
    protected $_identity;

    public function setIdentity($identity)
    {
        if (is_array($identity))
        {
            if (!isset($identity['role']))
            {
                $identity = new Zend_Acl_Role($identity['role']);
            }
        }
        elseif (is_scalar($identity) && !is_bool($identity))
        {
            $identity = new Zend_Acl_Role($identity);
        }
        elseif (null === $identity)
        {
            $identity = new Zend_Acl_Role('Guest');
        }
        elseif (!$identity instanceof Zend_Acl_Role_Interface)
        {
            throw new SF_Model_Exception('Invalid identity provided');
        }
        $this->_identity = $identity;
        return $this;
    }
    
    public function getIdentity()
    {
        if (null === $this->_identity)
        {
            $auth = Zend_Auth::getInstance();
            if (!$auth->hasIdentity())
            {
                return 'Guest';
            }
            $this->setIdentity($auth->getIdentity());
        }
        return $this->_identity;
    }

    public function checkAcl($action)
    {
        //$this->getAcl();
        return $this->getAcl()->isAllowed($this->getIdentity(), $this, $action);
        //return true;
    }
}
