public function getParents() { $nodeParents = array(); $treeid = intval($_POST['treeid']); if ($treeid) { $nodeParents = K_Tree::getParents($treeid); } $this->putJSON($nodeParents); }
private static function aclTreeLoadRules($allRules) { foreach ($allRules as $v) { $nodeIds = K_Tree::getParents($v['tree_rule_resource_id']); $nodeIdsArr = $nodeIds; $nodeIdsArr[] = $v['tree_rule_resource_id']; $fullNodeResourse = implode('/', $nodeIdsArr); //полный ресурс ноды if (!self::$aclTree->has($fullNodeResourse)) { // грузим ресурсы только если нода не загруженна. // проверяем есть ли у ноды предки if (count($nodeIds) > 0) { $nodeIds[] = $v['tree_rule_resource_id']; $tmpIds = $nodeIds; //проверяем на сколько загруженна ветка ресурса $i = count($nodeIds) - 1; foreach ($nodeIds as $k => $n) { $i--; array_pop($tmpIds); $rosourceParent = implode('/', $tmpIds); // ресурс предка ноды if (self::$aclTree->has($rosourceParent)) { break; } } // echo "*******\n"; $resourseArr = $tmpIds; // стартовая позиция с которой загружены ресурсы // догружаем ресурсы ветки ноды вместе с нодой for ($m = $i + 1; $m < count($nodeIds); $m++) { $resourseArr[] = $nodeIds[$m]; $resourse = strtolower(implode('/', $resourseArr)); // echo $rosourceParent."-parent\n"; // echo $resourse."-node\n"; self::$aclTree->add(new K_Acl_Resource($resourse), $rosourceParent == '' ? null : $rosourceParent, null); $rosourceParent = $resourse; } } else { //нет предков сразу грузим ресурс без предка, если он не загружен if (!self::$aclTree->has($v['tree_rule_resource_id'])) { self::$aclTree->add(new K_Acl_Resource($v['tree_rule_resource_id']), null, null); } } } // echo $v['role']." ".$fullNodeResourse.' '.$v['privilege']." ". $v['tree_ruleType'] ; //устанавливамем правило switch ($v['tree_ruleType']) { case 'allow': self::$aclTree->allow($v['role'], $fullNodeResourse, $v['privilege']); break; case 'deny': self::$aclTree->deny($v['role'], $fullNodeResourse, $v['privilege']); break; } } //K_Cache_Manager::get('unlim')->save('ATR', self::$aclTree); self::saveAclArrays('ATR', self::$aclTree); }
$allowTrigger = true; $nodeArr = array(); } for ($i = 0; $i < sizeof($treeElements); $i++) { $typeController = 'Type_Controller_' . ucfirst($treeElements[$i]['tree_type']); $resArr = $nodeArr; $resArr[] = $treeElements[$i]['tree_id']; $resourse = implode('/', $resArr); // echo $resourse."\n"; $access = K_Access::aclTree()->isAllowed(K_Auth::getRoles(), $resourse, true); // var_dump(K_Access::aclTree()->lastResource); if (K_Access::aclTree()->lastResource == null) { $access = $allowTrigger; } if ($access || $treeElements[$i]['tree_id'] == '1') { if ($treeElements[$i]['subElements']) { $nodeState = 'closed'; } else { $nodeState = ''; } if ($treeElements[$i]['tree_type'] == 'list') { $list = K_CupItems::getItems($treeElements[$i]['tree_id'], $treeElements[$i]['tree_type']); $allowTypes = array_map('trim', explode(',', $list[0]['types'])); } else { $allowTypes = $typeController::$allowedChildren; } if (!in_array("all", $allowTypes)) { $allows = array("types" => array("valid_children" => $allowTypes)); } $treeStructure = array('attr' => array('id' => 'node_' . $treeElements[$i]['tree_id'], 'rel' => $access ? $treeElements[$i]['tree_type'] : "disable_n"), 'data' => array("title" => $treeElements[$i]['tree_title'], 'icon' => "/adm/img/tree/" . $treeElements[$i]['tree_type'] . ".png", "attr" => array("href" => "#", "class" => $access ? "" : "ui-state-disabled")), "metadata" => array('id' => $treeElements[$i]['tree_id']), 'state' => $nodeState); $treeStructure['metadata']["jstree"] = $allows; $treeStructureArr[] = $treeStructure; // $treeStructure['metadata']['jstree']=$allows; } } $this->putJSON($treeStructureArr); } /* Перемещяет нод в дереве $key, $base_key, $position = 'bottom' */ public function moveAction() { $this->disableRender = true; $key = (int) $_POST['key']; $baseKey = (int) $_POST['base_key']; $position = $_POST['position']; $copy = (int) $_POST['copy']; $pasteKey = (int) $_POST['parent_key']; $node = K_Tree::getNode($key); if ($node['tree_bloked'] == '1') { $this->putAjax('{ "status" : false}'); } if ($copy) {