diff --git a/components/Route.php b/components/Route.php new file mode 100644 index 0000000..a32d767 --- /dev/null +++ b/components/Route.php @@ -0,0 +1,127 @@ +getModules() as $id => $child) { + if (($child = $module->getModule($id)) !== null) { + static::getRouteRecrusive($child, $result); + } + } + foreach ($module->controllerMap as $id => $type) { + static::getControllerActions($type, $id, $module, $result); + } + $namespace = trim($module->controllerNamespace, '\\') . '\\'; + static::getControllerFiles($module, $namespace, '', $result); + $result[] = ($module->uniqueId === '' ? '' : '/' . $module->uniqueId) . '/*'; + } + + /** + * Get list controller under module + * + * @param \yii\base\Module $module + * @param string $namespace + * @param string $prefix + * @param mixed $result + * + * @return mixed + */ + private static function getControllerFiles($module, $namespace, $prefix, + &$result) + { + $path = @Yii::getAlias('@' . str_replace('\\', '/', $namespace)); + if (!is_dir($path)) { + return; + } + foreach (scandir($path) as $file) { + if ($file == '.' || $file == '..') { + continue; + } + if (is_dir($path . '/' . $file)) { + static::getControllerFiles($module, $namespace . $file . '\\', $prefix . $file . '/', $result); + } elseif (strcmp(substr($file, -14), 'Controller.php') === 0) { + $id = Inflector::camel2id(substr(basename($file), 0, -14)); + $className = $namespace . Inflector::id2camel($id) . 'Controller'; + if (strpos($className, '-') === false && class_exists($className) + && is_subclass_of($className, 'yii\base\Controller')) { + static::getControllerActions($className, $prefix . $id, $module, $result); + } + } + } + } + + /** + * Get list action of controller + * + * @param mixed $type + * @param string $id + * @param \yii\base\Module $module + * @param string $result + */ + private static function getControllerActions($type, $id, $module, &$result) + { + /* @var $controller \yii\base\Controller */ + $controller = Yii::createObject($type, [$id, $module]); + static::getActionRoutes($controller, $result); + $result[] = '/' . $controller->uniqueId . '/*'; + } + + /** + * Get route of action + * + * @param \yii\base\Controller $controller + * @param array $result all controller action. + */ + private static function getActionRoutes($controller, &$result) + { + $prefix = '/' . $controller->uniqueId . '/'; + foreach ($controller->actions() as $id => $value) { + $result[] = $prefix . $id; + } + $class = new \ReflectionClass($controller); + foreach ($class->getMethods() as $method) { + $name = $method->getName(); + if ($method->isPublic() && !$method->isStatic() && strpos($name, 'action') === 0 + && $name !== 'actions') { + $result[] = $prefix . Inflector::camel2id(substr($name, 6)); + } + } + } +} \ No newline at end of file diff --git a/views/access/addPermission.php b/views/access/addPermission.php index f009b7b..1b01063 100644 --- a/views/access/addPermission.php +++ b/views/access/addPermission.php @@ -1,15 +1,18 @@ title = Yii::t('db_rbac', 'Новое правило'); -$this->params['breadcrumbs'][] = ['label' => Yii::t('db_rbac', 'Правила доступа'), 'url' => ['permission']]; +$this->title = Yii::t('db_rbac', 'Новое правило'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('db_rbac', 'Правила доступа'), + 'url' => ['permission']]; $this->params['breadcrumbs'][] = Yii::t('db_rbac', 'Новое правило'); ?>
+
+ ';
+ }
+ ?>
+
+