Ejemplo n.º 1
0
 /**
  * The page will be invisible if it has no resource and no visible children
  * This method is used to hide empty parent items in backend navigation
  *
  * @param  Zend_Navigation_Page $page      page to check
  * @return bool
  */
 public function isVisibleAtBackend(Zend_Navigation_Page $page)
 {
     if ($page->getResource()) {
         return true;
     }
     $visible = true;
     $iterator = new RecursiveIteratorIterator($page, RecursiveIteratorIterator::SELF_FIRST);
     foreach ($iterator as $child) {
         if (!$child->getResource()) {
             continue;
             // anchor page
         }
         $visible = $this->accept($child, false);
         if ($visible) {
             break;
         }
     }
     return $visible;
 }
 /**
  * Determines whether a page should be accepted by ACL when iterating
  *
  * Rules:
  * - If helper has no ACL, page is accepted
  * - If page has a resource or privilege defined, page is accepted
  *   if the ACL allows access to it using the helper's role
  * - If page has no resource or privilege, page is accepted
  *
  * @param  Zend_Navigation_Page $page  page to check
  * @return bool                        whether page is accepted by ACL
  */
 protected function _acceptAcl(Zend_Navigation_Page $page)
 {
     if (!($acl = $this->getAcl())) {
         // no acl registered means don't use acl
         return true;
     }
     $role = $this->getRole();
     $resource = $page->getResource();
     $privilege = $page->getPrivilege();
     if ($resource || $privilege) {
         // determine using helper role and page resource/privilege
         return $acl->isAllowed($role, $resource, $privilege);
     }
     return true;
 }
Ejemplo n.º 3
0
 /**
  * 根据Zend_Navigation_Page对象生成资源字符串
  * 
  * @static
  * @param Zend_Navigation_Page $page
  * @return string
  */
 public static function parseNavigationPage(Zend_Navigation_Page $page)
 {
     if ($page instanceof Zend_Navigation_Page_Mvc) {
         $mvc = array($page->getModule(), $page->getController(), $page->getAction());
         return implode(self::SEPARATOR, array_filter($mvc));
     } else {
         if ($page instanceof Zend_Navigation_Page_Uri) {
             return self::parseUri($page->getUri());
         }
     }
     return $page->getResource();
 }