/** * Действие строит дерево задач и ролей в Администрирование\Права доступа\Роли системы */ public function actionLoadRolesTasksJSON() { /* Инициализация/исключения */ $result = []; $type = (string) filter_input(INPUT_GET, 'type'); $id = (string) filter_input(INPUT_GET, 'id'); $itemname = (string) filter_input(INPUT_GET, 'itemname'); if ($type === '') { throw new CHttpException(500, 'Отсутствует $_POST["type"] при вызове действия actionLoadRolesTasksJSON()'); } if ($type === 'roles' && $id === '') { throw new CHttpException(500, 'Отсутствует $_POST["id"] при вызове действия actionLoadRolesTasksJSON()'); } if ($type === 'roles' && $id !== '#' && $itemname === '') { throw new CHttpException(500, 'Отсутствует $_POST["itemname"] при вызове действия actionLoadRolesTasksJSON()'); } /* Если выводим задачи в окне "Роли системы" */ if ($type === 'tasks') { /* Массив задач name, description */ foreach (AuthItem::model()->findAll(AuthItem::model()->AuthItemTasks()) as $row) { $result[] = (object) ['id' => $row['name'], 'text' => $row['description'], 'icon' => './images/task.png', 'li_attr' => (object) ['class' => 'taskitemnode', 'itemname' => $row['name']]]; } /* Если выводим роли в окне "Роли системы" */ } elseif ($type === 'roles') { /* Если выводим список ролей (т.е. роли не имеющие родителей) */ if ($id === '#') { /* Массив корневых ролей name, description (т.е. роли не имеющие родителей) */ foreach (AuthItem::model()->findAll(AuthItem::model()->AuthItemRoot()) as $row) { $result[] = (object) ['children' => count((array) Yii::app()->authManager->getItemChildren($row['name'])) > 0 ? true : false, 'text' => $row['description'], 'icon' => './images/role.png', 'li_attr' => (object) ['itemname' => $row['name'], 'class' => 'roleitemnode']]; } } else { /* Массив детей CAuthItem роли, исключая операции */ foreach (AuthItemChild::GetAuthItemChildren($itemname) as $authname => $row) { $result[] = (object) ['children' => count((array) AuthItemChild::GetAuthItemChildren($authname)) > 0 ? true : false, 'text' => $row->description, 'icon' => $row->type === 1 ? './images/task.png' : './images/role.png', 'state' => (object) ['opened' => true], 'li_attr' => (object) ['itemname' => $authname, 'class' => $row->type === 1 ? 'taskitemnode' : 'roleitemnode']]; } } } /* Выводим результат в JSON строку */ echo json_encode($result); }