Skip to content

Commit c8f271b

Browse files
committed
多个应用情况下,用户菜单列表按应用返回
1 parent 6690446 commit c8f271b

File tree

2 files changed

+46
-37
lines changed

2 files changed

+46
-37
lines changed

components/MenuHelper.php

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/**
1010
* MenuHelper used to generate menu depend of user role.
1111
* Usage
12-
*
12+
*
1313
* ```
1414
* use wind\rest\components\MenuHelper;
1515
* use yii\bootstrap\Nav;
@@ -18,9 +18,9 @@
1818
* 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id)
1919
* ]);
2020
* ```
21-
*
21+
*
2222
* To reformat returned, provide callback to method.
23-
*
23+
*
2424
* ```
2525
* $callback = function ($menu) {
2626
* $data = eval($menu['data']);
@@ -33,21 +33,22 @@
3333
* ]
3434
* }
3535
*
36-
* $items = MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback);
36+
* $items = MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback, $client);
3737
* ```
3838
*
39-
* @author Misbahul D Munir <[email protected]>
40-
* @since 1.0
39+
* @since 1.0
4140
*/
4241
class MenuHelper
4342
{
43+
4444
/**
4545
* Use to get assigned menu of user.
46-
* @param mixed $userId
47-
* @param integer $root
46+
*
47+
* @param mixed $userId
48+
* @param integer $root
4849
* @param \Closure $callback use to reformat output.
4950
* callback should have format like
50-
*
51+
*
5152
* ```
5253
* function ($menu) {
5354
* return [
@@ -60,18 +61,20 @@ class MenuHelper
6061
* }
6162
* ```
6263
* @param boolean $refresh
64+
* @param string $client 多应用情况下此参数,可作为区分不同应用的菜单,对应menu表中的`remark`字段(多应用-可作为应用类别使用)
65+
*
6366
* @return array
6467
*/
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)
6669
{
6770
$config = Configs::instance();
68-
71+
6972
/* @var $manager \yii\rbac\BaseManager */
7073
$manager = Yii::$app->getAuthManager();
71-
$menus = Menu::find()->asArray()->indexBy('id')->all();
74+
$menus = Menu::find()->asArray()->andFilterWhere(['remark' => $client])->indexBy('id')->all();
7275
$key = [__METHOD__, $userId, $manager->defaultRoles];
7376
$cache = $config->cache;
74-
77+
7578
if ($refresh || $cache === null || ($assigned = $cache->get($key)) === false) {
7679
$routes = $filter1 = $filter2 = [];
7780
if ($userId !== null) {
@@ -108,7 +111,7 @@ public static function getAssignedMenu($userId, $root = null, $callback = null,
108111
}
109112
}
110113
$assigned = [];
111-
$query = Menu::find()->select(['id'])->asArray();
114+
$query = Menu::find()->select(['id'])->andFilterWhere(['remark' => $client])->asArray();
112115
if (count($filter2)) {
113116
$assigned = $query->where(['route' => $filter2])->column();
114117
}
@@ -125,7 +128,7 @@ public static function getAssignedMenu($userId, $root = null, $callback = null,
125128
]));
126129
}
127130
}
128-
131+
129132
$key = [__METHOD__, $assigned, $root];
130133
if ($refresh || $callback !== null || $cache === null || (($result = $cache->get($key)) === false)) {
131134
$result = static::normalizeMenu($assigned, $menus, $callback, $root);
@@ -138,11 +141,13 @@ public static function getAssignedMenu($userId, $root = null, $callback = null,
138141

139142
return $result;
140143
}
141-
144+
142145
/**
143146
* Ensure all item menu has parent.
144-
* @param array $assigned
145-
* @param array $menus
147+
*
148+
* @param array $assigned
149+
* @param array $menus
150+
*
146151
* @return array
147152
*/
148153
private static function requiredParent($assigned, &$menus)
@@ -155,18 +160,20 @@ private static function requiredParent($assigned, &$menus)
155160
$assigned[$l++] = $parent_id;
156161
}
157162
}
158-
163+
159164
return $assigned;
160165
}
161-
166+
162167
/**
163168
* Parse route
164-
* @param string $route
169+
*
170+
* @param string $route
171+
*
165172
* @return mixed
166173
*/
167174
public static function parseRoute($route)
168175
{
169-
if (!empty($route)) {
176+
if ( !empty($route)) {
170177
$url = [];
171178
$r = explode('&', $route);
172179
$url[0] = $r[0];
@@ -175,19 +182,21 @@ public static function parseRoute($route)
175182
$part = explode('=', $part);
176183
$url[$part[0]] = isset($part[1]) ? $part[1] : '';
177184
}
178-
185+
179186
return $url;
180187
}
181-
188+
182189
return '#';
183190
}
184-
191+
185192
/**
186193
* 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+
*
191200
* @return array
192201
*/
193202
private static function normalizeMenu(&$assigned, &$menus, $callback, $parent = null)
@@ -216,7 +225,7 @@ private static function normalizeMenu(&$assigned, &$menus, $callback, $parent =
216225
if ($result != []) {
217226
array_multisort($order, $result);
218227
}
219-
228+
220229
return $result;
221230
}
222231
}

controllers/MenuController.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ public function actionUserMenu()
3636
$items = $menu['children'];
3737
$return = [
3838
'label' => $menu['name'],
39-
'url' => $menu['route']?substr($menu['route'],1):'',
39+
'url' => $menu['route'] ? substr($menu['route'], 1) : '',
4040
];
41-
$return['icon'] = $data['icon']??'fa fa-circle-o';
42-
$return['visible'] = $data['visible']??true;
41+
$return['icon'] = $data['icon'] ?? 'fa fa-circle-o';
42+
$return['visible'] = $data['visible'] ?? true;
4343
$items && $return['items'] = $items;
44-
44+
4545
return $return;
4646
};
47-
$result = MenuHelper::getAssignedMenu(Yii::$app->user->id,null,$callback);
47+
$result = MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback, Yii::$app->request->get('client'));
4848

4949
return $result;
5050
}
@@ -64,7 +64,7 @@ public function actionIndex()
6464
/**
6565
* 菜单详情
6666
*
67-
* @param integer $id
67+
* @param integer $id
6868
*
6969
* @return mixed
7070
*/
@@ -95,7 +95,7 @@ public function actionCreate()
9595
/**
9696
* 更新
9797
*
98-
* @param integer $id
98+
* @param integer $id
9999
*
100100
* @return mixed
101101
*/

0 commit comments

Comments
 (0)