forked from mdmsoft/yii2-admin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModule.php
113 lines (103 loc) · 3.21 KB
/
Module.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
namespace mdm\admin;
use Yii;
use yii\helpers\Inflector;
/**
* GUI manager for RBAC.
*
* Use [[\yii\base\Module::$controllerMap]] to change property of controller.
* To change listed menu, use property [[$menus]].
*
* ~~~
* 'layout' => 'left-menu', // default to null mean use application layout.
* 'controllerMap' => [
* 'assignment' => [
* 'class' => 'mdm\admin\controllers\AssignmentController',
* 'userClassName' => 'app\models\User',
* 'idField' => 'id'
* ]
* ],
* 'menus' => [
* 'assignment' => [
* 'label' => 'Grand Access' // change label
* ],
* 'route' => null, // disable menu
* ],
* ~~~
*
* @property string $mainLayout Main layout using for module. Default to layout of parent module.
* Its used when `layout` set to 'left-menu', 'right-menu' or 'top-menu'.
* @property array $menus List avalible menu of module.
* It generated by module items .
*
* @author Misbahul D Munir <[email protected]>
* @since 1.0
*/
class Module extends \yii\base\Module
{
/**
* @inheritdoc
*/
public $defaultRoute = 'assignment';
/**
* @var array
* @see [[items]]
*/
private $_menus;
/**
* @var string Main layout using for module. Default to layout of parent module.
* Its used when `layout` set to 'left-menu', 'right-menu' or 'top-menu'.
*/
public $mainLayout ='@mdm/admin/views/layouts/main.php';
/**
* Get core menu
* @return array
* @var $ids array has 'Menu Lable' => 'Controller' pairs
*/
protected function getCoreMenus()
{
$mid = '/' . $this->getUniqueId() . '/';
$ids = ['Assignments' => 'assignment', 'Roles' => 'role', 'Permissions' => 'permission', 'Routes' => 'route', 'Rules' => 'rule', 'Menus' => 'menu'];
$config = components\Configs::instance();
$result = [];
foreach ($ids as $lable => $id) {
if ($id !== 'menu' || ($config->db !== null && $config->db->schema->getTableSchema($config->menuTable) !== null)) {
$result[$id] = ['label' => Yii::t('rbac-admin', $lable), 'url' => [$mid . $id]];
}
}
foreach (array_keys($this->controllerMap) as $id) {
$result[$id] = ['label' => Yii::t('rbac-admin', Inflector::humanize($id)), 'url' => [$mid . $id]];
}
return $result;
}
/**
* Get avalible menu.
* @return array
*/
public function getMenus()
{
if ($this->_menus === null) {
return $this->_menus = $this->getCoreMenus();
}
return $this->_menus;
}
/**
* Set or add avalible menu.
* @param array $menus
*/
public function setMenus($menus)
{
$mid = '/' . $this->getUniqueId() . '/';
$this->_menus = $this->getMenus();
foreach ($menus as $id => $value) {
if (empty($value)) {
unset($this->_menus[$id]);
} else {
$this->_menus[$id] = isset($this->_menus[$id]) ? array_merge($this->_menus[$id], $value) : $value;
if (!isset($this->_menus[$id]['url'])) {
$this->_menus[$id]['url'] = [$mid . $id];
}
}
}
}
}