Beispiel #1
0
 public static function accessTree($nodeId, $privilege = null, $addNodes = false)
 {
     self::initTree();
     $nodeArr = K_tree::getParents($nodeId);
     // выбираем всех родителей ноды
     $nodeArr[] = $nodeId;
     // добовляем id самой ноды
     $allowTrigger = false;
     $access = false;
     // по умолчанию доступ запрещён
     //проверяем на доступ ноду со всеми её родителями к которой запрашиваються потомки
     // проверка идёт с верху вниз
     /**
      *@todo протестировать проверку с низу-вверх, как быстрей ?
      */
     // c низу вверх(должно работать быстрей);
     //проверка не самой ноды а сразу ноды родителя(необходимо для привелегий add addremove)
     if ($addNodes) {
         array_pop($nodeArr);
     }
     $i = count($nodeArr);
     for ($i; $i > 0; $i--) {
         $resourse = implode('/', $nodeArr);
         array_pop($nodeArr);
         $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, $privilege);
         if (K_Access::aclTree()->lastResource) {
             break;
         }
     }
     /*  // проверка с верху ввниз         
             foreach ($nodeArr as $v) {
                 $resourseArr[] = $v;
     
                 $resourse = implode('/', $resourseArr);
                 $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, null);
     
                 if (K_Access::aclTree()->lastResource == null) {
                     $access = $allowTrigger;
                 } else {
                     $lastKnowResourse = K_Access::aclTree()->lastResource;
                 }
                 
                 $allowTrigger = $access;
             }*/
     return $access;
 }
Beispiel #2
0
    
    Returns data for client-side tree
    
    var data = [
    {
    label: 'Тест',
    children: [
    { label: 'child1' },
    { label: 'child2' }
    ]
    },
    {
    label: 'Тест 2',
    children: [
    { label: 'child3' }
    ]
    }
    ];
    
    */
    public function getAction()
    {
        $this->disableRender = true;
        $query = new K_Db_Query();
        $treeStructure = array();
        $treeElements = array();
        if ($this->getParam('pid')) {
            $nodeId = $this->getParam('pid');
        } else {
            $nodeId = 0;
        }
        // Прийдётся лезть в тип списка
        $pidType = K_TreeQuery::gOne((int) $nodeId);
        //var_dump($pidType);
        if ($pidType['sorted'] == "По алфавиту") {
            $order = "`t1`.`tree_title`";
        } else {
            $order = "`t1`.`tree_lkey`";
        }
        $sql = 'SELECT `t1`.*, COUNT(`t2`.`tree_id`) as subElements FROM `tree` as `t1` 
				LEFT JOIN `tree` as `t2` ON `t2`.`tree_pid` = `t1`.`tree_id`
				WHERE `t1`.`tree_pid`=' . (int) $nodeId . '
				GROUP BY `t1`.`tree_id`, `t1`.`tree_pid`, `t1`.`tree_title`
				ORDER BY ' . $order;
        $treeElements = $query->q($sql);
        foreach ($treeElements as $key => $column) {
            $treeElements[$key] = $column->toArray();
        }
        if ($nodeId != '0') {
            $nodeArr = K_tree::getParents($nodeId);
            // выбираем всех родителей ноды
            $nodeArr[] = $nodeId;
            // добовляем id самой ноды
            // проверяем на доступ ноду со всеми её родителями к которой запрашиваються потомки
            /* foreach ( $pid_node_perents as $v ) {
			if ( is_string( $v ) ) {
			$resourse_arr[] = $v;
			$resourse = 't:' . implode( '/', $resourse_arr );
			// echo $resourse;
			try {
			$access = K_Access::acl()->isAllowed( K_Auth::getRoles(), $resourse, 'view' );
			// var_dump($access);
			}
			catch ( exception $e ) {
			$access = $allow_trigger;
			}
			$allow_trigger = $access;
			}
			}*/
            //строим ресур запрашиваемой ноды если нода не равна 0
            $allowTrigger = false;
            $access = false;
            $_nodeArr = $nodeArr;
            for ($i = count($_nodeArr); $i > 0; $i--) {
                $resourse = implode('/', $_nodeArr);
                array_pop($_nodeArr);
                $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, true);
                if (K_Access::aclTree()->lastResource) {
                    break;
                }
            }
            $allowTrigger = $access;