9
9
/**
10
10
* MenuHelper used to generate menu depend of user role.
11
11
* Usage
12
- *
12
+ *
13
13
* ```
14
14
* use wind\rest\components\MenuHelper;
15
15
* use yii\bootstrap\Nav;
18
18
* 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id)
19
19
* ]);
20
20
* ```
21
- *
21
+ *
22
22
* To reformat returned, provide callback to method.
23
- *
23
+ *
24
24
* ```
25
25
* $callback = function ($menu) {
26
26
* $data = eval($menu['data']);
33
33
* ]
34
34
* }
35
35
*
36
- * $items = MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback);
36
+ * $items = MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback, $client );
37
37
* ```
38
38
*
39
- * @author Misbahul D Munir <[email protected] >
40
- * @since 1.0
39
+ * @since 1.0
41
40
*/
42
41
class MenuHelper
43
42
{
43
+
44
44
/**
45
45
* Use to get assigned menu of user.
46
- * @param mixed $userId
47
- * @param integer $root
46
+ *
47
+ * @param mixed $userId
48
+ * @param integer $root
48
49
* @param \Closure $callback use to reformat output.
49
50
* callback should have format like
50
- *
51
+ *
51
52
* ```
52
53
* function ($menu) {
53
54
* return [
@@ -60,18 +61,20 @@ class MenuHelper
60
61
* }
61
62
* ```
62
63
* @param boolean $refresh
64
+ * @param string $client 多应用情况下此参数,可作为区分不同应用的菜单,对应menu表中的`remark`字段(多应用-可作为应用类别使用)
65
+ *
63
66
* @return array
64
67
*/
65
- public static function getAssignedMenu ($ userId , $ root = null , $ callback = null , $ refresh = false )
68
+ public static function getAssignedMenu ($ userId , $ root = null , $ callback = null , $ refresh = false , $ client = null )
66
69
{
67
70
$ config = Configs::instance ();
68
-
71
+
69
72
/* @var $manager \yii\rbac\BaseManager */
70
73
$ manager = Yii::$ app ->getAuthManager ();
71
- $ menus = Menu::find ()->asArray ()->indexBy ('id ' )->all ();
74
+ $ menus = Menu::find ()->asArray ()->andFilterWhere ([ ' remark ' => $ client ])-> indexBy ('id ' )->all ();
72
75
$ key = [__METHOD__ , $ userId , $ manager ->defaultRoles ];
73
76
$ cache = $ config ->cache ;
74
-
77
+
75
78
if ($ refresh || $ cache === null || ($ assigned = $ cache ->get ($ key )) === false ) {
76
79
$ routes = $ filter1 = $ filter2 = [];
77
80
if ($ userId !== null ) {
@@ -108,7 +111,7 @@ public static function getAssignedMenu($userId, $root = null, $callback = null,
108
111
}
109
112
}
110
113
$ assigned = [];
111
- $ query = Menu::find ()->select (['id ' ])->asArray ();
114
+ $ query = Menu::find ()->select (['id ' ])->andFilterWhere ([ ' remark ' => $ client ])-> asArray ();
112
115
if (count ($ filter2 )) {
113
116
$ assigned = $ query ->where (['route ' => $ filter2 ])->column ();
114
117
}
@@ -125,7 +128,7 @@ public static function getAssignedMenu($userId, $root = null, $callback = null,
125
128
]));
126
129
}
127
130
}
128
-
131
+
129
132
$ key = [__METHOD__ , $ assigned , $ root ];
130
133
if ($ refresh || $ callback !== null || $ cache === null || (($ result = $ cache ->get ($ key )) === false )) {
131
134
$ result = static ::normalizeMenu ($ assigned , $ menus , $ callback , $ root );
@@ -138,11 +141,13 @@ public static function getAssignedMenu($userId, $root = null, $callback = null,
138
141
139
142
return $ result ;
140
143
}
141
-
144
+
142
145
/**
143
146
* Ensure all item menu has parent.
144
- * @param array $assigned
145
- * @param array $menus
147
+ *
148
+ * @param array $assigned
149
+ * @param array $menus
150
+ *
146
151
* @return array
147
152
*/
148
153
private static function requiredParent ($ assigned , &$ menus )
@@ -155,18 +160,20 @@ private static function requiredParent($assigned, &$menus)
155
160
$ assigned [$ l ++] = $ parent_id ;
156
161
}
157
162
}
158
-
163
+
159
164
return $ assigned ;
160
165
}
161
-
166
+
162
167
/**
163
168
* Parse route
164
- * @param string $route
169
+ *
170
+ * @param string $route
171
+ *
165
172
* @return mixed
166
173
*/
167
174
public static function parseRoute ($ route )
168
175
{
169
- if (!empty ($ route )) {
176
+ if ( !empty ($ route )) {
170
177
$ url = [];
171
178
$ r = explode ('& ' , $ route );
172
179
$ url [0 ] = $ r [0 ];
@@ -175,19 +182,21 @@ public static function parseRoute($route)
175
182
$ part = explode ('= ' , $ part );
176
183
$ url [$ part [0 ]] = isset ($ part [1 ]) ? $ part [1 ] : '' ;
177
184
}
178
-
185
+
179
186
return $ url ;
180
187
}
181
-
188
+
182
189
return '# ' ;
183
190
}
184
-
191
+
185
192
/**
186
193
* Normalize menu
187
- * @param array $assigned
188
- * @param array $menus
189
- * @param Closure $callback
190
- * @param integer $parent
194
+ *
195
+ * @param array $assigned
196
+ * @param array $menus
197
+ * @param Closure $callback
198
+ * @param integer $parent
199
+ *
191
200
* @return array
192
201
*/
193
202
private static function normalizeMenu (&$ assigned , &$ menus , $ callback , $ parent = null )
@@ -216,7 +225,7 @@ private static function normalizeMenu(&$assigned, &$menus, $callback, $parent =
216
225
if ($ result != []) {
217
226
array_multisort ($ order , $ result );
218
227
}
219
-
228
+
220
229
return $ result ;
221
230
}
222
231
}
0 commit comments