/** * 获取指定菜单id数组url规则记录 * * @param array $menuIdArr 菜单id数组 * @return array */ public static function getUrlRuleByMenuIdArr($menuIdArr) { $urlRuls = []; $urlIdArr = DpAdminMenuUrlRelation::getUrlIdArrByMenuIdArr($menuIdArr); foreach ($urlIdArr as $urlId) { $url = static::find()->findByUrlId($urlId)->active()->asArray()->one(); if ($url) { $urlRuleAll = DpAdminMenuUrlRule::find()->active()->findByUrlId($urlId)->all(); $rule = []; foreach ($urlRuleAll as $item) { $rule[$item['param_name']] = $item['rule']; } $urlRuls[] = ['route' => $url['route'], 'method' => $url['method'], 'enable_rule' => $url['enable_rule'], 'rule' => $rule]; } } return $urlRuls; }
/** * 获取根据parent_id和菜单id权限url数据 * * @param boolean $isSuper 是否为超级用户 * @param array $menuIdList 菜单id列表 * @param int $parentId 父级id * @param array|string $condition 条件 * @param array $params 条件参数 * @param string $order 排序 * @return array */ public static function getUrlsByParentId($isSuper, $menuIdList, $parentId, $condition = '', $params = [], $order = 'display_order asc') { $data = static::find()->normal()->findByParentId($parentId)->andWhere($condition, $params)->active()->orderBy($order)->asArray()->all(); $urls = []; if ($data) { foreach ($data as $item) { if ($isSuper || in_array($item['menu_id'], $menuIdList)) { $menuUrls = DpAdminMenuUrlRelation::getAllUrlByMenuId($item['menu_id']); if ($menuUrls) { foreach ($menuUrls as $menuUrl) { $urls[$menuUrl['alias']] = Url::toRoute($menuUrl['route']); } } $childrenUrls = static::getUrlsByParentId($isSuper, $menuIdList, $item['menu_id'], $condition, $params, $order); if ($childrenUrls) { $urls = array_merge($urls, $childrenUrls); } } } } return $urls; }
/** * 更新状态 * * @return array */ public function actionUpdateStatus() { $ids = \Yii::$app->request->post('ids'); $status = intval(\Yii::$app->request->post('status')); if ($status != 0) { $status = 1; } foreach (StringHelper::explode($ids, ',', true, true) as $id) { $obj = DpAdminMenuUrlRelation::find()->findByLinkId($id)->one(); if ($obj) { $obj->status = $status; $obj->save(); } } return $this->renderSuccess('状态更新成功'); }
/** * 保存数据 * * @return array */ public function actionSave() { $url_id = \Yii::$app->request->post('url_id'); $menu_id = \Yii::$app->request->post('menu_id'); $name = \Yii::$app->request->post('name'); $alias = \Yii::$app->request->post('alias'); $route = \Yii::$app->request->post('route'); $method = \Yii::$app->request->post('method'); $host = \Yii::$app->request->post('host'); $enable_rule = \Yii::$app->request->post('enable_rule'); $note = \Yii::$app->request->post('note'); $status = \Yii::$app->request->post('status'); if (!$alias) { // 自动生成别名 if (strpos($route, '/') === 0) { $tempRoute = substr($route, 1, strlen($route)); } else { $tempRoute = $route; } $alias = join('.', StringHelper::explode($tempRoute, '/', true, true)); } $methodStr = ''; if (is_array($method)) { $method = array_filter($method, function ($value) { return in_array($value, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']); }); $methodStr = join(',', $method); } $saveData = ['name' => $name, 'alias' => $alias, 'route' => $route, 'method' => $methodStr, 'host' => $host, 'enable_rule' => $enable_rule, 'note' => $note, 'status' => $status]; $obj = null; if ($url_id) { $obj = DpAdminMenuUrl::find()->findByUrlId($url_id)->one(); if (!$obj) { return $this->renderError('保存失败,记录不存在!'); } } else { if ($alias) { $obj = DpAdminMenuUrl::find()->findByAlias($alias)->one(); } if (!$obj) { $obj = new DpAdminMenuUrl(); } } $obj->setAttributes($saveData); if (!$obj->save()) { foreach ($obj->getErrors() as $error) { foreach ($error as $message) { return ['success' => false, 'msg' => $message]; } } } if ($menu_id) { if (!DpAdminMenu::getByMenuId($menu_id)) { return $this->renderError('菜单不存在'); } else { $linkObj = new DpAdminMenuUrlRelation(); $linkObj->setAttributes(['menu_id' => $menu_id, 'url_id' => $obj->url_id, 'status' => DpAdminMenuUrlRelation::STATUS_ACTIVE]); if (!$linkObj->save()) { foreach ($obj->getErrors() as $error) { foreach ($error as $message) { return ['success' => false, 'msg' => $message]; } } } } } return $this->renderSuccess('保存成功'); }