Skip to content

Commit 053a991

Browse files
author
igor-chepurnoi
committed
added excludeModules property to RouteModel
1 parent aedffec commit 053a991

File tree

3 files changed

+43
-21
lines changed

3 files changed

+43
-21
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ return [
7575
'pageSize' => 10
7676
],
7777
],
78+
'route' => [
79+
'class' => 'yii2mod\rbac\controllers\RouteController',
80+
// for example: exclude `api, debug and gii` modules from list of routes
81+
'modelClass' => [
82+
'class' => 'yii2mod\rbac\models\RouteModel',
83+
'excludeModules' => ['api', 'debug', 'gii'],
84+
],
85+
],
7886
]
7987
],
8088
]

controllers/RouteController.php

+11-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@
1515
*/
1616
class RouteController extends Controller
1717
{
18+
/**
19+
* @var array route model class
20+
*/
21+
public $modelClass = [
22+
'class' => RouteModel::class,
23+
];
24+
1825
/**
1926
* Returns a list of behaviors that this component should behave as.
2027
*
@@ -50,7 +57,7 @@ public function behaviors()
5057
*/
5158
public function actionIndex()
5259
{
53-
$model = new RouteModel();
60+
$model = Yii::createObject($this->modelClass);
5461

5562
return $this->render('index', ['routes' => $model->getRoutes()]);
5663
}
@@ -63,7 +70,7 @@ public function actionIndex()
6370
public function actionAssign()
6471
{
6572
$routes = Yii::$app->getRequest()->post('routes', []);
66-
$model = new RouteModel();
73+
$model = Yii::createObject($this->modelClass);
6774
$model->addNew($routes);
6875

6976
return $model->getRoutes();
@@ -77,7 +84,7 @@ public function actionAssign()
7784
public function actionRemove()
7885
{
7986
$routes = Yii::$app->getRequest()->post('routes', []);
80-
$model = new RouteModel();
87+
$model = Yii::createObject($this->modelClass);
8188
$model->remove($routes);
8289

8390
return $model->getRoutes();
@@ -88,7 +95,7 @@ public function actionRemove()
8895
*/
8996
public function actionRefresh()
9097
{
91-
$model = new RouteModel();
98+
$model = Yii::createObject($this->modelClass);
9299
$model->invalidate();
93100

94101
return $model->getRoutes();

models/RouteModel.php

+24-17
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class RouteModel extends Object
2929
*/
3030
public $cacheDuration = 3600;
3131

32+
/**
33+
* @var array list of module IDs that will be excluded
34+
*/
35+
public $excludeModules = [];
36+
3237
/**
3338
* @var \yii\rbac\ManagerInterface
3439
*/
@@ -156,29 +161,31 @@ public function invalidate()
156161
*/
157162
protected function getRouteRecursive($module, &$result)
158163
{
159-
$token = "Get Route of '" . get_class($module) . "' with id '" . $module->uniqueId . "'";
160-
Yii::beginProfile($token, __METHOD__);
164+
if (!in_array($module->id, $this->excludeModules)) {
165+
$token = "Get Route of '" . get_class($module) . "' with id '" . $module->uniqueId . "'";
166+
Yii::beginProfile($token, __METHOD__);
167+
168+
try {
169+
foreach ($module->getModules() as $id => $child) {
170+
if (($child = $module->getModule($id)) !== null) {
171+
$this->getRouteRecursive($child, $result);
172+
}
173+
}
161174

162-
try {
163-
foreach ($module->getModules() as $id => $child) {
164-
if (($child = $module->getModule($id)) !== null) {
165-
$this->getRouteRecursive($child, $result);
175+
foreach ($module->controllerMap as $id => $type) {
176+
$this->getControllerActions($type, $id, $module, $result);
166177
}
167-
}
168178

169-
foreach ($module->controllerMap as $id => $type) {
170-
$this->getControllerActions($type, $id, $module, $result);
179+
$namespace = trim($module->controllerNamespace, '\\') . '\\';
180+
$this->getControllerFiles($module, $namespace, '', $result);
181+
$all = '/' . ltrim($module->uniqueId . '/*', '/');
182+
$result[$all] = $all;
183+
} catch (\Exception $exc) {
184+
Yii::error($exc->getMessage(), __METHOD__);
171185
}
172186

173-
$namespace = trim($module->controllerNamespace, '\\') . '\\';
174-
$this->getControllerFiles($module, $namespace, '', $result);
175-
$all = '/' . ltrim($module->uniqueId . '/*', '/');
176-
$result[$all] = $all;
177-
} catch (\Exception $exc) {
178-
Yii::error($exc->getMessage(), __METHOD__);
187+
Yii::endProfile($token, __METHOD__);
179188
}
180-
181-
Yii::endProfile($token, __METHOD__);
182189
}
183190

184191
/**

0 commit comments

Comments
 (0)