public function actionIndex() { $this->view->title = $this->getConfig('system.name'); $user = []; $urls = []; if (!Yii::$app->user->isGuest) { $groupNames = $this->identity->getGroupNames(); $user = ['username' => $this->identity->username, 'nickname' => $this->identity->nickname, 'isSuper' => $this->identity->is_super, 'groupName' => join(',', $groupNames)]; $urls = DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, 0); } return $this->renderPartial('index', ['isGuest' => Yii::$app->user->isGuest, 'loading_text' => $this->getConfig('system.loadingText'), 'config' => $this->config, 'user' => $user, 'urls' => $urls]); }
public function actionIndex() { $this->view->title = $this->getConfig('system.name'); $user = []; $urls = ['admin.public.login' => Url::toRoute('/admin/public/login'), 'admin.public.logout' => Url::toRoute('/admin/public/logout'), 'admin.common.tree' => Url::toRoute('/admin/common/tree'), 'admin.common.urls' => Url::toRoute('/admin/common/urls')]; if (!Yii::$app->user->isGuest) { $groupNames = $this->identity->getGroupNames(); $user = ['username' => $this->identity->username, 'nickname' => $this->identity->nickname, 'isSuper' => $this->identity->is_super, 'groupName' => join(',', $groupNames)]; $urls = array_merge($urls, ['admin.config.save' => Url::toRoute('/admin/config/save'), 'admin.config.options' => Url::toRoute('/admin/config/options')], DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, 0)); } return $this->renderPartial('index', ['isGuest' => Yii::$app->user->isGuest, 'loading_text' => $this->getConfig('system.loading_text'), 'config' => $this->config, 'user' => $user, 'urls' => $urls, 'extJs' => $this->extJs]); }
/** * 获取指定用户的所有菜单id记录 * * @param int $userId 用户id * @return array */ public static function getAllMenuIdArrByUserId($userId) { $data = static::find()->findByUserId($userId)->asArray()->all(); $menuIdArr = []; foreach ($data as $item) { $menu = DpAdminMenu::find()->findByMenuId($item['menu_id'])->asArray()->one(); if ($menu) { $menuIdArr[] = $item['menu_id']; } } return $menuIdArr; }
public function run() { /* @var $controller \wsl\rbac\base\Controller */ /* @var $identity \wsl\rbac\models\DpAdminUser */ $controller = $this->controller; $view = Yii::$app->getView(); $identity = Yii::$app->user->identity; $view->title = $controller->getConfig('system.name'); $user = []; $urls = []; if (!Yii::$app->user->isGuest) { $groupNames = $identity->getGroupNames(); $user = ['username' => $identity->username, 'nickname' => $identity->nickname, 'isSuper' => $identity->is_super, 'groupName' => join(',', $groupNames)]; $urls = DpAdminMenu::getUrlsByParentId($identity->is_super, $controller->menuIdList, 0); } $params = ['isGuest' => Yii::$app->user->isGuest, 'loadingText' => $controller->getConfig('system.loadingText'), 'config' => $controller->config, 'user' => $user, 'urls' => $urls]; $viewPath = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR; return $view->renderFile($viewPath . 'index.php', $params, $this->controller); }
/** * 保存数据 * * @return array */ public function actionSave() { $group_id = \Yii::$app->request->post('group_id'); $menu_ids = \Yii::$app->request->post('menu_ids'); $name = \Yii::$app->request->post('name'); $is_system = \Yii::$app->request->post('is_system'); $note = \Yii::$app->request->post('note'); $status = \Yii::$app->request->post('status'); $saveData = ['name' => $name, 'is_system' => $is_system, 'note' => $note, 'status' => $status]; if ($group_id) { $obj = DpAdminGroup::find()->findByGroupId($group_id)->one(); if (!$obj) { return $this->renderError('保存失败,记录不存在!'); } } else { $obj = new DpAdminGroup(); } $obj->setAttributes($saveData); if (!$obj->save()) { foreach ($obj->getErrors() as $error) { foreach ($error as $message) { return ['success' => false, 'msg' => $message]; } } } // 用户组关联的菜单权限更新 DpAdminGroupMenuRelation::deleteByGroupId($obj->group_id); if ($menu_ids) { $menuIdArr = array_filter(StringHelper::explode($menu_ids, ',', true, true), function ($menuId) { return DpAdminMenu::getByMenuId($menuId); }); if ($menuIdArr) { foreach ($menuIdArr as $menuId) { $linkObj = new DpAdminGroupMenuRelation(); $linkObj->setAttributes(['group_id' => $obj->group_id, 'menu_id' => $menuId]); $linkObj->save(); } } } return $this->renderSuccess('保存成功'); }
/** * @return \yii\db\ActiveQuery */ public function getMenus() { return $this->hasMany(DpAdminMenu::className(), ['menu_id' => 'menu_id'])->viaTable('{{%admin_user_menu_relation}}', ['user_id' => 'user_id']); }
/** * 保存数据 * * @return array */ public function actionSave() { $user_id = \Yii::$app->request->post('user_id'); $menu_ids = \Yii::$app->request->post('menu_ids'); $username = \Yii::$app->request->post('username'); $nickname = \Yii::$app->request->post('nickname'); $source_password = \Yii::$app->request->post('source_password'); $group_ids = (array) \Yii::$app->request->post('group_ids'); $is_group_access = \Yii::$app->request->post('is_group_access'); $is_user_access = \Yii::$app->request->post('is_user_access'); $is_system = \Yii::$app->request->post('is_system'); $note = \Yii::$app->request->post('note'); $status = \Yii::$app->request->post('status'); $groupIdsStr = ''; if ($group_ids) { $groupIdsStr = join(',', array_filter($group_ids, function ($groupId) { return DpAdminGroup::getByGroupId($groupId); })); } $saveData = ['username' => $username, 'nickname' => $nickname, 'source_password' => $source_password, 'group_ids' => $groupIdsStr, 'is_group_access' => $is_group_access, 'is_user_access' => $is_user_access, 'is_system' => $is_system, 'note' => $note, 'status' => $status]; if ($user_id) { $obj = DpAdminUser::find()->where(['user_id' => $user_id])->one(); if (!$obj) { return $this->renderError('保存失败,记录不存在!'); } } else { $obj = new DpAdminUser(); } $obj->setAttributes($saveData); if (!$obj->save()) { foreach ($obj->getErrors() as $error) { foreach ($error as $message) { return ['success' => false, 'msg' => $message]; } } } // 用户关联的菜单权限更新 DpAdminUserMenuRelation::deleteByUserId($obj->user_id); if ($menu_ids) { $menuIdArr = array_filter(StringHelper::explode($menu_ids, ',', true, true), function ($menuId) { return DpAdminMenu::getByMenuId($menuId); }); if ($menuIdArr) { foreach ($menuIdArr as $menuId) { $linkObj = new DpAdminUserMenuRelation(); $linkObj->setAttributes(['user_id' => $obj->user_id, 'menu_id' => $menuId]); $linkObj->save(); } } } return $this->renderSuccess('保存成功'); }
/** * 更新状态 * * @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 = DpAdminMenu::find()->findByMenuId($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('保存成功'); }
/** * 更新排序 * * @return bool */ public function updateSort() { if ($this->validate()) { $srcMenuModels = DpAdminMenu::find()->andFilterWhere(['in', 'menu_id', $this->menu_ids])->orderBy([new Expression('field(menu_id, ' . join(',', $this->menu_ids) . ')')])->all(); $targetMenuModel = DpAdminMenu::find()->findByMenuId($this->target_menu_id)->one(); $menuModels = DpAdminMenu::find()->findByParentId($targetMenuModel->parent_id)->defaultOrder()->all(); $srcMenuIds = ArrayHelper::getColumn($srcMenuModels, 'menu_id'); if ($srcMenuModels && $targetMenuModel && $menuModels) { if (static::POSITION_BEFORE == $this->position) { $displayOrder = -1; $transaction = Yii::$app->db->beginTransaction(); foreach ($menuModels as $itemMenuModel) { if (in_array($itemMenuModel->menu_id, $srcMenuIds)) { continue; } $displayOrder++; if ($targetMenuModel->menu_id == $itemMenuModel->menu_id) { // before foreach ($srcMenuModels as $itemSrcMenuMode) { $itemSrcMenuMode->display_order = $displayOrder; $itemSrcMenuMode->parent_id = $targetMenuModel->parent_id; if (!$itemSrcMenuMode->save()) { $transaction->rollBack(); $this->addErrors($itemSrcMenuMode->errors); return false; } $displayOrder++; } // target $targetMenuModel->display_order = $displayOrder; if (!$targetMenuModel->save()) { $transaction->rollBack(); $this->addErrors($targetMenuModel->errors); return false; } continue; } $itemMenuModel->display_order = $displayOrder; if (!$itemMenuModel->save()) { $transaction->rollBack(); $this->addErrors($itemMenuModel->errors); return false; } } $transaction->commit(); return true; } elseif (static::POSITION_AFTER == $this->position) { $displayOrder = -1; $transaction = Yii::$app->db->beginTransaction(); foreach ($menuModels as $itemMenuModel) { if (in_array($itemMenuModel->menu_id, $srcMenuIds)) { continue; } $displayOrder++; if ($targetMenuModel->menu_id == $itemMenuModel->menu_id) { // target $targetMenuModel->display_order = $displayOrder; if (!$targetMenuModel->save()) { $transaction->rollBack(); $this->addErrors($targetMenuModel->errors); return false; } $displayOrder++; // after foreach ($srcMenuModels as $itemSrcMenuMode) { $itemSrcMenuMode->display_order = $displayOrder; $itemSrcMenuMode->parent_id = $targetMenuModel->parent_id; if (!$itemSrcMenuMode->save()) { $transaction->rollBack(); $this->addErrors($itemSrcMenuMode->errors); return false; } $displayOrder++; } continue; } $itemMenuModel->display_order = $displayOrder; if (!$itemMenuModel->save()) { $transaction->rollBack(); $this->addErrors($itemMenuModel->errors); return false; } } $transaction->commit(); return true; } elseif (static::POSITION_APPEND == $this->position) { $menuModels = DpAdminMenu::find()->findByParentId($targetMenuModel->menu_id)->defaultOrder()->all(); if ($menuModels) { // 将目标菜单设置成该目标元素下的最后一个元素 $targetParentMenuModels = DpAdminMenu::find()->findByParentId($targetMenuModel->menu_id)->defaultOrder()->all(); $targetMenuModel = array_pop($targetParentMenuModels); $displayOrder = -1; $transaction = Yii::$app->db->beginTransaction(); foreach ($menuModels as $itemMenuModel) { if (in_array($itemMenuModel->menu_id, $srcMenuIds)) { continue; } $displayOrder++; if ($targetMenuModel->menu_id == $itemMenuModel->menu_id) { // target $targetMenuModel->display_order = $displayOrder; if (!$targetMenuModel->save()) { $transaction->rollBack(); $this->addErrors($targetMenuModel->errors); return false; } $displayOrder++; // after foreach ($srcMenuModels as $itemSrcMenuMode) { $itemSrcMenuMode->display_order = $displayOrder; $itemSrcMenuMode->parent_id = $targetMenuModel->parent_id; if (!$itemSrcMenuMode->save()) { $transaction->rollBack(); $this->addErrors($itemSrcMenuMode->errors); return false; } $displayOrder++; } continue; } $itemMenuModel->display_order = $displayOrder; if (!$itemMenuModel->save()) { $transaction->rollBack(); $this->addErrors($itemMenuModel->errors); return false; } } } else { $displayOrder = 0; // 菜单没有节点时 $transaction = Yii::$app->db->beginTransaction(); foreach ($srcMenuModels as $itemSrcMenuMode) { $itemSrcMenuMode->display_order = $displayOrder; $itemSrcMenuMode->parent_id = $targetMenuModel->menu_id; if (!$itemSrcMenuMode->save()) { $transaction->rollBack(); $this->addErrors($itemSrcMenuMode->errors); return false; } $displayOrder++; } } $transaction->commit(); return true; } } } return false; }
/** * 拖拽排序 * * @return bool */ public function dragSort() { if ($this->validate()) { $menuModel = DpAdminMenu::find()->findByMenuId($this->target_menu_id)->one(); // 调整排序的菜单id $dropMenuIdArr = array_filter(StringHelper::explode($this->menu_ids, ',', true, true), function ($value) { return is_numeric($value) && DpAdminMenu::find()->findByMenuId($value)->exists(); }); // 调整排序菜单数量 $dropCount = count($dropMenuIdArr); if (static::POSITION_BEFORE == $this->position) { // 节点之前 $menuAllObj = DpAdminMenu::find()->findByParentId($menuModel->parent_id)->orderBy('display_order asc')->all(); // 将要插入的菜单前面的排序向前移动 // 插入的开始排序号 $startOrder = $menuModel->display_order - 1; $otherStartOrder = $startOrder - $dropCount; foreach ($menuAllObj as $menuObj) { if ($menuObj->menu_id == $menuModel->menu_id) { break; } $menuObj->display_order = $otherStartOrder--; $menuObj->save(); } $dropStartOrder = $menuModel->display_order - $dropCount; foreach ($dropMenuIdArr as $menuId) { $dropMenu = DpAdminMenu::find()->findByMenuId($menuId)->one(); if ($dropMenu) { $dropMenu->parent_id = $menuModel->parent_id; $dropMenu->display_order = $dropStartOrder++; $dropMenu->save(); } } return true; } elseif (static::POSITION_AFTER == $this->position) { // 节点之后 // 在菜单后插入 $menuAllObj = DpAdminMenu::find()->findByParentId($menuModel->parent_id)->andWhere('menu_id not in (' . join(',', $dropMenuIdArr) . ')')->all(); // 将要插入的菜单后面的排序向后移动 // 插入的开始排序号 $isStartOrder = false; $startOrder = $menuModel->display_order + 1; $otherStartOrder = $startOrder + $dropCount; foreach ($menuAllObj as $menuObj) { if ($menuObj->menu_id == $menuModel->menu_id) { $isStartOrder = true; continue; } if (!$isStartOrder) { continue; } $menuObj->display_order = $otherStartOrder++; $menuObj->save(); } foreach ($dropMenuIdArr as $menuId) { $dropMenu = DpAdminMenu::find()->findByMenuId($menuId)->one(); if ($dropMenu) { $dropMenu->parent_id = $menuModel->parent_id; $dropMenu->display_order = $startOrder++; $dropMenu->save(); } } return true; } elseif (static::POSITION_APPEND == $this->position) { // 节点内 // 添加为子节点 $maxDisplayOrder = DpAdminMenu::find()->findByParentId($menuModel->menu_id)->max('display_order'); foreach ($dropMenuIdArr as $menuId) { $dropMenu = DpAdminMenu::find()->findByMenuId($menuId)->one(); if ($dropMenu) { $dropMenu->parent_id = $menuModel->menu_id; $dropMenu->display_order = ++$maxDisplayOrder; $dropMenu->save(); } } return true; } } return false; }
/** * @inheritDoc */ public function rules() { return [[['menu_ids', 'position', 'target_menu_id'], 'required'], [['menu_ids', 'position'], 'string'], [['target_menu_id'], 'integer'], [['target_menu_id'], 'exist', 'targetClass' => DpAdminMenu::className()]]; }
/** * 所有拥有权限的url别名对应url数据 * * @return array */ public function actionUrls() { $urls = DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, null); $urls = array_merge($urls, ['admin.public.login' => Url::toRoute('/admin/public/login'), 'admin.public.logout' => Url::toRoute('/admin/public/logout'), 'admin.common.tree' => Url::toRoute('/admin/common/tree'), 'admin.common.urls' => Url::toRoute('/admin/common/urls'), 'admin.config.save' => Url::toRoute('/admin/config/save'), 'admin.config.options' => Url::toRoute('/admin/config/options'), 'admin.group.save' => Url::toRoute('/admin/group/save'), 'admin.group.update-status' => Url::toRoute('/admin/group/update-status'), 'admin.group.del' => Url::toRoute('/admin/group/del'), 'admin.user.save' => Url::toRoute('/admin/user/save'), 'admin.user.update-status' => Url::toRoute('/admin/user/update-status'), 'admin.user.del' => Url::toRoute('/admin/user/del'), 'admin.menu.save' => Url::toRoute('/admin/menu/save'), 'admin.menu.update-status' => Url::toRoute('/admin/menu/update-status'), 'admin.menu.del' => Url::toRoute('/admin/menu/del'), 'admin.menu-url.save' => Url::toRoute('/admin/menu-url/save'), 'admin.menu-url.update-status' => Url::toRoute('/admin/menu-url/update-status'), 'admin.menu-url.del' => Url::toRoute('/admin/menu-url/del'), 'admin.menu-url-link.save' => Url::toRoute('/admin/menu-url-link/save'), 'admin.menu-url-link.update-status' => Url::toRoute('/admin/menu-url-link/update-status'), 'admin.menu-url-link.del' => Url::toRoute('/admin/menu-url-link/del'), 'admin.menu-url-rule.save' => Url::toRoute('/admin/menu-url-rule/save'), 'admin.menu-url-rule.update-status' => Url::toRoute('/admin/menu-url-rule/update-status'), 'admin.menu-url-rule.del' => Url::toRoute('/admin/menu-url-rule/del')], DpAdminMenu::getUrlsByParentId($this->identity->is_super, $this->menuIdList, null)); return ['data' => $urls]; }